DevPrep

Все темы › Современный Swift

Что такое property wrapper?

Middle PRO

Суть

Property wrapper — тип с атрибутом @propertyWrapper, который инкапсулирует логику хранения и доступа к свойству. Компилятор заменяет @Wrapper var x на скрытое хранимое свойство _x: Wrapper и computed-свойство x, которое читает/пишет _x.wrappedValue. Если у обёртки есть projectedValue, он доступен как $x.

@propertyWrapper
struct Clamped<Value: Comparable> {
    private var value: Value
    let range: ClosedRange<Value>

    init(wrappedValue: Value, _ range: ClosedRange<Value>) {
        self.range = range
        self.value = min(max(wrappedValue, range.lowerBound), range.upperBound)
    }
    var wrappedValue: Value {
        get { value }
        set { value = min(max(newValue, range.lowerBound), range.upperBound) }
    }
    var projectedValue: ClosedRange<Value> { range }   // доступен как $health
}

struct Player {
    @Clamped(0...100) var health = 120
}
var player = Player()
print(player.health)                   // 100
player.health = -5
print(player.health, player.$health)   // 0 0...100

Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.

Полный ответ — в DevPrep

Потренируйтесь перед собеседованием

В DevPrep эти ответы превращаются в задачи на минуту: что напечатает код, найди баг, пробное собеседование. По задаче в день.

Скачать DevPrep в App Store