Sobes.tech
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.