0Pricing
Swift Academy · Lekcja

CustomStringConvertible

Definiowanie czytelnego opisu własnych typów.

CustomStringConvertible to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 4 lekcji w sumie.

Czym jest CustomStringConvertible

Ten protokół pozwala kontrolować sposób wyświetlania typu podczas drukowania lub interpolowania go w ciągu znaków. Należy udostępnić właściwość description.

Wartość domyślna jest nieczytelna

Bez tego struktury są drukowane w pełnej postaci z wszystkimi składowymi, co często powoduje nadmiar danych:

struct Point { let x: Int; let y: Int }
print(Point(x: 1, y: 2))  // Point(x: 1, y: 2)

Dodawanie description

Należy zapewnić zgodność z protokołem i udostępnić var description: String:

struct Point: CustomStringConvertible {
    let x: Int
    let y: Int
    var description: String { "(\(x), \(y))" }
}
print(Point(x: 1, y: 2))  // (1, 2)

Używanie przez print i String(describing:)

Właściwość description jest używana przez print i interpolację ciągów znaków:

struct Money: CustomStringConvertible {
    let cents: Int
    var description: String { "$\(Double(cents) / 100)" }
}
let m = Money(cents: 250)
print("price is \(m)")  // price is $2.5

description a bezpośrednie właściwości

description służy do tworzenia czytelnego dla człowieka tekstu przeznaczonego dla użytkownika. Nie jest przeznaczona do ponownego parsowania — jest to osobne zagadnienie, którym zajmuje się Codable. Należy zadbać o jej czytelność.

Formatowanie typu wyliczeniowego

Typom wyliczeniowym można nadać przyjazne nazwy:

enum Suit: CustomStringConvertible {
    case hearts, spades
    var description: String {
        switch self {
        case .hearts: return "Hearts"
        case .spades: return "Spades"
        }
    }
}
print(Suit.hearts)  // Hearts

Składanie opisów

Opis można zbudować z opisów składowych:

struct Card: CustomStringConvertible {
    let rank: Int
    let suit: String
    var description: String { "\(rank) of \(suit)" }
}
let cards = [Card(rank: 1, suit: "H"), Card(rank: 13, suit: "S")]
print(cards.map { $0.description })  // ["1 of H", "13 of S"]

Wewnątrz kolekcji

Drukowanie kolekcji wywołuje opis każdego elementu:

struct Tag: CustomStringConvertible {
    let name: String
    var description: String { "#\(name)" }
}
print([Tag(name: "swift"), Tag(name: "ios")])  // [#swift, #ios]

Interpolacja używa description

Interpolacja ciągów znaków automatycznie korzysta z właściwości description:

struct Temperature: CustomStringConvertible {
    let celsius: Int
    var description: String { "\(celsius)C" }
}
let t = Temperature(celsius: 21)
print("Now: \(t)")  // Now: 21C

Należy zachować wydajność

description może być wywoływana często (podczas rejestrowania i debugowania). Należy unikać wykonywania w niej kosztownych operacji; najlepiej obliczać prosty ciąg znaków na podstawie przechowywanych właściwości.

struct ID: CustomStringConvertible {
    let value: Int
    var description: String { "ID#\(value)" }
}
print(ID(value: 42))  // ID#42

Formatowanie warunkowe

Właściwość description może zależeć od stanu, aby tekst brzmiał naturalnie:

struct Stock: CustomStringConvertible {
    let count: Int
    var description: String {
        count == 0 ? "Out of stock" : "\(count) in stock"
    }
}
print(Stock(count: 0))  // Out of stock
print(Stock(count: 5))  // 5 in stock

Szybkie sprawdzenie

Jakiej właściwości wymaga CustomStringConvertible?

Podsumowanie

Poznali Państwo CustomStringConvertible:

  • Należy udostępnić var description: String, aby tworzyć tekst przeznaczony dla użytkownika
  • Właściwość jest używana przez print, String(describing:) i interpolację
  • Należy zachować jej czytelność i wydajność; nie należy projektować jej z myślą o odtwarzaniu wartości
  • Działa automatycznie również wewnątrz kolekcji

Następnie: CustomDebugStringConvertible.

Często zadawane pytania

Czy lekcja „CustomStringConvertible” jest bezpłatna?

Tak — pełny tekst „CustomStringConvertible” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „CustomStringConvertible”?

Definiowanie czytelnego opisu własnych typów. Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Swift Academy?

Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „CustomStringConvertible”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?

Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. CustomStringConvertible
  2. CustomDebugStringConvertible
  3. Refleksja za pomocą Mirror
  4. Budowanie typów przyjaznych debugowaniu
← Powrót do Swift Academy