0Pricing
Swift Academy · Урок

Создание собственного оболочечного свойства

Реализуйте @propertyWrapper с wrappedValue, чтобы инкапсулировать логику.

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

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

Обёртки свойств инкапсулируют логику хранения свойств, позволяя повторно использовать шаблонный код для проверки, преобразования или сохранения данных.

Базовый синтаксис

```swift @propertyWrapper struct Clamped { var wrappedValue: Int { didSet { wrappedValue = min(max(0,wrappedValue),100) } } init(wrappedValue: Int) { self.wrappedValue = min(max(0,wrappedValue),100) } } struct Gauge { @Clamped var level = 50 } var g = Gauge() g.level = 150 // clamped to 100 ```

Требование wrappedValue

Каждая обёртка свойства должна определять `wrappedValue`. Именно это значение пользователь обёртки читает и изменяет.

Обобщённые обёртки свойств

```swift @propertyWrapper struct Logged { private var value: T var wrappedValue: T { get { print("get"); return value } set { print("set to \(newValue)"); value = newValue } } init(wrappedValue: T) { value = wrappedValue } } ```

Использование обёртки

```swift struct Model { @Logged var name: String = "Default" } var m = Model() let n = m.name // prints "get" m.name = "Alice" // prints "set to Alice" ```

Аргументы пользовательского инициализатора

```swift @propertyWrapper struct Default { var wrappedValue: T init(wrappedValue: T) { self.wrappedValue = wrappedValue } init(_ default: T) { wrappedValue = default } } @Default(42) var count: Int ```

Обёртка для хранимого и вычисляемого свойства

Обёртки свойств добавляют скрытое хранилище (_wrappedValue). Свойство с аннотацией является синтаксическим сокращением: ```swift @Clamped var level = 50 // Desugars to: var _level = Clamped(wrappedValue: 50) var level: Int { get { _level.wrappedValue } set { _level.wrappedValue = newValue } } ```

Обёртка UserDefaults

```swift @propertyWrapper struct UserDefault { let key: String; let defaultValue: T var wrappedValue: T { get { UserDefaults.standard.object(forKey: key) as? T ?? defaultValue } set { UserDefaults.standard.set(newValue, forKey: key) } } } @UserDefault(key:"theme",defaultValue:"light") var theme: String ```

Потокобезопасная обёртка

```swift @propertyWrapper final class Atomic { private var value: T; private let lock = NSLock() var wrappedValue: T { get { lock.lock(); defer { lock.unlock() }; return value } set { lock.lock(); defer { lock.unlock() }; value = newValue } } init(wrappedValue: T) { value = wrappedValue } } ```

Объединение обёрток в типе

```swift struct Settings { @Clamped var volume = 50 @UserDefault(key:"username",defaultValue:"") var username: String @Logged var debugMode = false } ```

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

Какое свойство обязательно должно быть в каждом типе `@propertyWrapper`?

Итоги

Основные выводы: • `@propertyWrapper` + `wrappedValue` = минимальная обёртка свойства • Обёртка добавляет скрытое хранилище `_name` • Обобщённые обёртки работают с любым типом T • Распространённые применения: ограничение диапазона, журналирование, UserDefaults, потокобезопасность • Пользовательские аргументы инициализатора позволяют настроить обёртку Далее: проецируемые значения.

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

Урок «Создание собственного оболочечного свойства» бесплатный?

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

Чему я научусь в уроке «Создание собственного оболочечного свойства»?

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

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

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

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

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

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

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

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

  1. Создание собственного оболочечного свойства
  2. Проецируемые значения с помощью $binding
  3. @Published и наблюдение в Combine
  4. Композиция нескольких оболочек свойств
← Назад к Swift Academy