web-dev-qa-db-fra.com

Les noms de paramètres par défaut "oldValue" et "newValue" dans willSet/didSet ne sont pas reconnus

J'écris actuellement le code Swift 3 dans Xcode 8. 

Lorsque j'utilise les paramètres par défaut oldValue et newValue dans les blocs willSet et didSet, l'erreur "unresolved identifier" du compilateur m'arrive.

J'ai un code très basique comme ci-dessous

var vc:UIViewController? {
    willSet {
        print("Old value is \(oldValue)")
    }
    didSet(viewController) {
        print("New value is \(newValue)")
    }
}

Documentation Apple pour Swift 3 semble toujours prendre en charge ces fonctionnalités. J'espère que rien ne me manque ici?

16
Adithya

Vous pouvez également utiliser vc:

var vc:UIViewController? {
    willSet {
        print("New value is \(newValue) and old is \(vc)")
    }
    didSet {
        print("Old value is \(oldValue) and new is \(vc)")
    }
}
33
FranMowinckel
var vc:UIViewController? {
    willSet {
        print("New value is \(newValue)")
    }
    didSet {
        print("Old value is \(oldValue)")
    }
}

La variable spéciale newValue ne fonctionne que dans willSet, alors que oldValue ne fonctionne que dans didSet.

La propriété référencée par son nom (dans cet exemple, vc) est toujours liée à l'ancienne valeur dans willSet et est liée à la nouvelle valeur dans didSet.

8
Robin Stewart

Vous n'avez pas essayé d'initialiser la variable avec un nouvel objet avec lequel vous pouvez définir votre clojure:

var vc:UIViewController? = UIViewController(){
   willSet { 
       print("Old value is \(oldValue)")
   }
   didSet(viewController) {
       print("New value is \(newValue)")
   }
}
1
gomozor