Sobes.tech
Junior

Wat betekent het als er een setter voor een variabele wordt ingesteld?

sobes.tech AI

Antwoord van AI

Een setter (instelling) is een methode waarmee je het schrijven van een nieuwe waarde naar een variabele kunt controleren. Bij het definiëren van een setter wordt het standaardmechanisme van toewijzing van de waarde vervangen door code binnen de setter. Dit maakt het mogelijk:

  • Invoerwaarden valideren: Controleren of de nieuwe waarde voldoet aan de gestelde voorwaarden voordat deze aan de variabele wordt toegekend.
    var age: Int = 0 {
        didSet { // De setter (didSet) wordt aangeroepen na het toewijzen
            if age < 0 {
                age = 0 // Negatieve waarden niet toestaan
            }
        }
    }
    
  • Extra acties uitvoeren: Andere code uitvoeren bij het wijzigen van de waarde van de variabele, bijvoorbeeld de gebruikersinterface bijwerken of andere delen van de applicatie informeren.
    var score: Int = 0 {
        didSet { // De setter (didSet)
            print("Score bijgewerkt naar \(score)") // Wijziging loggen
            updateUI() // UI bijwerken
        }
    }
    
    func updateUI() {
        // Code om de interface bij te werken
    }
    
  • Waarden van andere eigenschappen berekenen: Het wijzigen van één eigenschap kan de waarde van een andere beïnvloeden.
    var radius: Double = 0.0 {
        didSet { // De setter (didSet)
            area = Double.pi * radius * radius // Opnieuw berekenen van het oppervlak bij radiuswijziging
        }
    }
    
    var area: Double = 0.0 // Eigenschap die afhangt van radius
    

Setters in Swift kunnen worden gebruikt voor opgeslagen eigenschappen en berekende eigenschappen. Voor opgeslagen eigenschappen worden vaak property observers (willSet en didSet) gebruikt, die vóór en na het toewijzen van een nieuwe waarde worden aangeroepen. Voor berekende eigenschappen bepaalt de set hoe de waarde moet worden toegekend.

var myProperty: String {
    // Getter
    get {
        return "Waarde is: \(internalValue)"
    }
    // Setter
    set(newValue) {
        internalValue = newValue + " verwerkt" // Toegekende waarde aanpassen
    }
}

private var internalValue: String = "" // Interne opgeslagen eigenschap