0Pricing
Swift Academy · Урок

CustomStringConvertible

Задавайте удобное для чтения описание своих типов.

«CustomStringConvertible» — бесплатный урок Swift Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.

Что такое CustomStringConvertible

Этот протокол позволяет управлять тем, как Ваш тип отображается при печати или интерполяции в строку. Вам нужно предоставить свойство description.

Стандартное представление непривлекательно

Без этого структуры выводятся в полной форме со всеми членами, что часто создаёт лишний шум:

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

Добавление description

Добавьте соответствие протоколу и предоставьте 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)

Используется функциями print и String(describing:)

Именно Ваше description используют print и интерполяция строк:

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 и непосредственные свойства

description предназначено для понятного человеку текста, который видит пользователь. Оно не предназначено для обратного разбора — это уже другая задача (Codable). Делайте его удобным для чтения.

Форматирование перечисления

Задайте для перечисления понятные имена:

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

Составление описаний

Составьте описание из описаний отдельных членов:

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"]

Внутри коллекций

При печати коллекции вызывается описание каждого элемента:

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

Интерполяция использует description

Интерполяция строк автоматически использует Ваше description:

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

Не делайте его дорогим

description может вызываться часто (при журналировании и отладке). Не выполняйте внутри него тяжёлые операции; составляйте простую строку из хранимых свойств.

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

Условное форматирование

description может выбирать разные варианты в зависимости от состояния, чтобы текст звучал естественно:

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

Быстрая проверка

Какое свойство требует CustomStringConvertible?

Итоги

Вы изучили CustomStringConvertible:

  • Предоставляйте var description: String для текста, который видит пользователь
  • Используется функциями print, String(describing:) и интерполяцией
  • Делайте текст понятным и недорогим для вычисления; не стремитесь к возможности обратного преобразования
  • Автоматически работает внутри коллекций

Далее: CustomDebugStringConvertible.

Часто задаваемые вопросы

Урок «CustomStringConvertible» бесплатный?

Да — полный текст урока «CustomStringConvertible» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.

Чему я научусь в уроке «CustomStringConvertible»?

Задавайте удобное для чтения описание своих типов. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Swift Academy?

Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «CustomStringConvertible»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Swift Academy?

Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. CustomStringConvertible
  2. CustomDebugStringConvertible
  3. Отражение с помощью Mirror
  4. Создание типов, удобных для отладки
← Назад к Swift Academy