Sobes.tech
Junior

Que signifie-t-il si on définit un setter pour une variable?

sobes.tech IA

Réponse de l'IA

Un setter (mutateur) est une méthode qui permet de contrôler l’écriture d’une nouvelle valeur dans une variable. Lors de la définition d’un setter, le mécanisme standard d’affectation par défaut est remplacé par un code à l’intérieur du setter. Cela permet :

  • Valider les données d’entrée : Vérifier si la nouvelle valeur respecte les conditions avant de l’assigner à la variable.
    var age: Int = 0 {
        didSet { // Le setter (didSet) est appelé après l’affectation
            if age < 0 {
                age = 0 // Ne pas permettre d’assigner une valeur négative
            }
        }
    }
    
  • Effectuer des actions supplémentaires : Exécuter un autre code lors du changement de la valeur de la variable, par exemple, mettre à jour l’interface utilisateur ou notifier d’autres parties de l’application.
    var score: Int = 0 {
        didSet { // Le setter (didSet)
            print("Score mis à jour à \(score)") // Loguer le changement
            updateUI() // Mettre à jour l’UI
        }
    }
    
    func updateUI() {
        // Code pour mettre à jour l’interface
    }
    
  • Calculer les valeurs d’autres propriétés : La modification d’une propriété peut influencer la valeur d’une autre.
    var radius: Double = 0.0 {
        didSet { // Le setter (didSet)
            area = Double.pi * radius * radius // Recalculer la surface lors du changement du rayon
        }
    }
    
    var area: Double = 0.0 // Propriété dépendant de radius
    

Les setters en Swift peuvent être utilisés pour les propriétés stockées et les propriétés calculées. Pour les propriétés stockées, on utilise souvent des observateurs de propriétés (willSet et didSet), qui sont appelés avant et après l’affectation d’une nouvelle valeur, respectivement. Pour les propriétés calculées, le setter (set) définit comment la valeur doit être assignée.

var myProperty: String {
    // Getter
    get {
        return "La valeur est : \(internalValue)"
    }
    // Setter
    set(newValue) {
        internalValue = newValue + " traité" // Modifier la valeur assignée
    }
}

private var internalValue: String = "" // Propriété interne stockée