Sobes.tech
Junior

Ce înseamnă dacă se stabilește un setter pentru o variabilă?

sobes.tech AI

Răspuns de la AI

Un setter (setare) este o metodă care permite controlul scrierii unei noi valori într-o variabilă. La definirea unui setter, mecanismul standard de atribuție a valorii implicite este înlocuit cu un cod din interiorul setter-ului. Acest lucru permite:

  • Validarea datelor de intrare: Verificarea dacă noua valoare respectă condițiile stabilite înainte de a o atribui variabilei.
    var age: Int = 0 {
        didSet { // Setter-ul (didSet) este apelat după atribuție
            if age < 0 {
                age = 0 // Nu permitem atribuirea unei valori negative
            }
        }
    }
    
  • Executarea unor acțiuni suplimentare: Rularea altui cod atunci când se schimbă valoarea variabilei, de exemplu, actualizarea interfeței utilizatorului sau notificarea altor părți ale aplicației.
    var score: Int = 0 {
        didSet { // Setter-ul (didSet)
            print("Scor actualizat la \(score)") // Înregistrarea modificării
            updateUI() // Actualizarea UI
        }
    }
    
    func updateUI() {
        // Cod pentru actualizarea interfeței
    }
    
  • Calcularea valorilor altor proprietăți: Modificarea unei proprietăți poate influența valoarea altei.
    var radius: Double = 0.0 {
        didSet { // Setter-ul (didSet)
            area = Double.pi * radius * radius // Recalcularea ariei la schimbarea razei
        }
    }
    
    var area: Double = 0.0 // Proprietate dependentă de radius
    

Setters în Swift pot fi folosiți pentru proprietăți stocate și proprietăți calculate. Pentru proprietățile stocate, se folosesc adesea observatori de proprietate (willSet și didSet), care sunt apelați înainte și după atribuirea unei noi valori, respectiv. Pentru proprietățile calculate, setter-ul (set) definește modul în care trebuie să fie atribuită valoarea.

var myProperty: String {
    // Getter
    get {
        return "Valoarea este: \(internalValue)"
    }
    // Setter
    set(newValue) {
        internalValue = newValue + " procesat" // Modificarea valorii atribuite
    }
}

private var internalValue: String = "" // Proprietate internă stocată