web-dev-qa-db-fra.com

Comment remplacer setter dans Swift

Une superclasse:

class MySuperView : UIView{
    var aProperty ;
}

Une sous-classe héritant de la super classe:

class Subclass : MySuperClass{
    // I want to override the aProperty's setter/getter method
}

Je veux remplacer la méthode setter/getter de la propriété de la superclasse,

comment remplacer cette méthode dans Swift? Aidez-moi, merci.

25
user5465320

Que voulez-vous faire avec votre setter personnalisé? Si vous voulez que la classe fasse quelque chose avant/après que la valeur soit définie, vous pouvez utiliser willSet/didSet:

class TheSuperClass { 
   var aVar = 0 
} 

class SubClass: TheSuperClass { 
     override var aVar: Int { 
         willSet { 
            print("WillSet aVar to \(newValue) from \(aVar)") 
        } 
        didSet { 
            print("didSet aVar to \(aVar) from \(oldValue)") 
        } 
    } 
} 


let aSub = SubClass()
aSub.aVar = 5

Sortie console:

WillSet aVar à 5 de 0

didSet aVar à 5 de 0

Si, cependant, vous voulez changer complètement la façon dont le setter interagit avec la superclasse:

class SecondSubClass: TheSuperClass { 
     override var aVar: Int { 
        get {
            return super.aVar
        }
        set { 
            print("Would have set aVar to \(newValue) from \(aVar)") 
        } 
    } 
} 

let secondSub = SecondSubClass()
print(secondSub.aVar)
secondSub.aVar = 5
print(secondSub.aVar)

Sortie console:

Aurait mis aVar à 5 de 0

46
MaddTheSane