Хранимые и вычисляемые свойства, наблюдатели
Определяйте хранимые и вычисляемые свойства, создавайте свойства только для чтения и get/set, а также реагируйте на изменения с помощью наблюдателей willSet/didSet.
«Хранимые и вычисляемые свойства, наблюдатели» — бесплатный урок Swift Academy на CoddyKit. Это урок 2 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 3 уроков всего.
Обзор
В этом уроке сопоставляются хранимые и вычисляемые свойства, а также показывается, как наблюдатели willSet/didSet реагируют на изменения.
Хранимые и вычисляемые
Хранимые свойства сохраняют данные. Вычисляемые свойства вычисляют значение при обращении к ним.
struct Rectangle {
// stored properties (hold data)
var width: Double
var height: Double
// computed property (derived on access)
var area: Double {
return width * height // read-only computed
}
}
let r = Rectangle(width: 3, height: 4)
print("area =", r.area) // 12Вычисляемые свойства: чтение и запись
Добавьте получение/установку, чтобы создать вычисляемое свойство для чтения и записи, поддерживающее согласованность инвариантов.
struct Circle {
var radius: Double // stored
var diameter: Double { // computed read-write
get { radius * 2 }
set { radius = newValue / 2 }
}
}
var c = Circle(radius: 5)
print(c.diameter) // 10
c.diameter = 14
print(c.radius) // 7Наблюдатели в действии
Наблюдатели выполняются до и после изменений хранимого свойства. Используйте newValue/oldValue для получения контекста.
struct Counter {
var value: Int = 0 {
willSet { print("will set to", newValue) }
didSet { print("did set from", oldValue) }
}
}
var cnt = Counter()
cnt.value = 5
cnt.value = 9Наблюдатели и вычисляемые свойства
Примечания:
- Наблюдатели применяются к хранимым свойствам, включая свойства, значения которым задаются в расширениях.
- Вычисляемые свойства не поддерживают наблюдатели — вместо этого помещайте логику в установку.
- Наблюдатели не вызываются во время инициализации, пока хранилище не готово.
Практический шаблон
Объединяйте наблюдатели для нормализации входных данных и вычисляемое свойство для получения отображаемых данных.
struct Score {
var raw: Int = 0 {
didSet {
if raw < 0 { raw = 0 }
if raw > 100 { raw = 100 }
}
}
var label: String {
// computed: derive a label from current raw
if raw >= 90 { return "A" }
if raw >= 80 { return "B" }
if raw >= 70 { return "C" }
return "D"
}
}
var s = Score()
s.raw = 120
print(s.raw, s.label) // 100 A
s.raw = -5
print(s.raw, s.label) // 0 DПравило для наблюдателей
Быстрая проверка: что выполняется до и после изменения хранимого свойства?
Повторение
Повторение: используйте хранимые свойства для данных, вычисляемые — для производных значений с получением и установкой, а willSet/didSet — для реакции на изменения хранимых свойств.
Часто задаваемые вопросы
Урок «Хранимые и вычисляемые свойства, наблюдатели» бесплатный?
Да — полный текст урока «Хранимые и вычисляемые свойства, наблюдатели» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 3 уроков всего.
Чему я научусь в уроке «Хранимые и вычисляемые свойства, наблюдатели»?
Определяйте хранимые и вычисляемые свойства, создавайте свойства только для чтения и get/set, а также реагируйте на изменения с помощью наблюдателей willSet/didSet. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Swift Academy?
Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 3.
Сколько времени занимает урок «Хранимые и вычисляемые свойства, наблюдатели»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Swift Academy?
Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Структуры и классы, свойства и инициализаторы
- Хранимые и вычисляемые свойства, наблюдатели
- Инициализаторы и deinit (классы)