Swift Academy · Урок

Хранимые свойства и наблюдатели свойств

Наблюдатели didSet и willSet для реакции на изменения свойств.

Урок 2 из 412 шагов

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

Добро пожаловать

Хранимые свойства содержат значения внутри структуры или класса. Наблюдатели свойств — `willSet` и `didSet` — позволяют реагировать на изменение значения хранимого свойства.

Хранимые свойства

```swift struct Counter { var count: Int = 0 // stored, mutable let name: String // stored, immutable } ``` Каждое значение, присвоенное с помощью `let` или `var` внутри типа, является хранимым свойством.

Наблюдатель didSet

```swift struct Gauge { var level: Int = 0 { didSet { print("Changed from \(oldValue) to \(level)") } } } var g = Gauge() g.level = 5 // "Changed from 0 to 5" ``` `oldValue` — это автоматически предоставляемое предыдущее значение.

Наблюдатель willSet

```swift struct Slider { var value: Double = 0.5 { willSet { print("About to change to \(newValue)") } } } ``` `newValue` — это автоматически предоставляемое поступающее значение. `willSet` срабатывает до присваивания.

Оба наблюдателя вместе

```swift var temperature: Double = 20 { willSet { print("Will become \(newValue)") } didSet { print("Was \(oldValue)") } } temperature = 25 // Will become 25.0 // Was 20.0 ```

Ограничение значений с помощью didSet

```swift var volume: Int = 50 { didSet { if volume > 100 { volume = 100 } if volume < 0 { volume = 0 } } } volume = 150 // clamped to 100 ``` Удобный шаблон для автоматического поддержания инвариантов.

Наблюдатели в подклассах

Наблюдатели свойств также работают с унаследованными свойствами: ```swift class Base { var x: Int = 0 } class Child: Base { override var x: Int { didSet { print("x changed to \(x)") } } } ```

Наблюдатели не срабатывают при инициализации

```swift struct Model { var value: Int = 0 { didSet { print("changed") } } init(v: Int) { self.value = v } // does NOT trigger didSet } ``` Наблюдатели не срабатывают во время первоначального присваивания в `init`.

Хранимые и вычисляемые свойства — краткое различие

• Хранимое: `var x: Int = 0` — содержит фактическое хранилище • Вычисляемое: `var doubled: Int { x * 2 }` — вычисляется при обращении, хранилища нет • Наблюдатель: присоединяется к хранимому свойству и реагирует на изменения Наблюдателей нельзя добавлять к вычисляемым свойствам (у них уже есть `get`/`set`).

Замечание о производительности

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

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

Какой наблюдатель свойства предоставляет доступ к **предыдущему** значению?

Итоги

Основные выводы: • Хранимые свойства напрямую содержат значения • `willSet` срабатывает до сохранения нового значения; предоставляется `newValue` • `didSet` срабатывает после сохранения; предоставляется `oldValue` • Наблюдатели не срабатывают во время `init` • Они отлично подходят для побочных эффектов, таких как обновление интерфейса, журналирование и проверка Далее: вычисляемые свойства.
Можно начать бесплатно

Изучай Swift с ИИ-репетитором — бесплатно

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

Курсы
122
Уроки
409

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

Урок «Хранимые свойства и наблюдатели свойств» бесплатный?

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

Чему я научусь в уроке «Хранимые свойства и наблюдатели свойств»?

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

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

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

Сколько времени занимает урок «Хранимые свойства и наблюдатели свойств»?

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

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

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

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

  1. Инициализаторы со всеми свойствами и пользовательские инициализаторы
  2. Хранимые свойства и наблюдатели свойств
  3. Вычисляемые свойства в структурах
  4. Изменяющие методы и семантика копирования при записи
← Назад к Swift Academy