Junior — Middle
Ar galima Swift kalboje įgyvendinti savo nuosavą savybės apvalkalą?
sobes.tech AI
Atsakymas iš AI
Taip, Swift galite kurti savo nuosavus savybių apvalkalus (property wrappers). Tai specialus tipas, kuris inkapsuliuoja prieigos ir saugojimo logiką savybės reikšmei.
Pavyzdys paprasto apvalkalo, kuris riboja savybės reikšmę nuo 0 iki 100:
@propertyWrapper
struct Clamped {
private var value: Int
private let range: ClosedRange<Int>
var wrappedValue: Int {
get { value }
set { value = min(max(newValue, range.lowerBound), range.upperBound) }
}
init(wrappedValue initialValue: Int, _ range: ClosedRange<Int>) {
self.range = range
self.value = min(max(initialValue, range.lowerBound), range.upperBound)
}
}
struct Player {
@Clamped(0...100) var health: Int = 100
}
var player = Player()
player.health = 150
print(player.health) // Išves 100, nes reikšmė yra apribota
Taip, apvalkalai leidžia pakartotinai naudoti ir centralizuoti logiką, susijusią su savybėmis.