web-dev-qa-db-de.com

Die Namen der Standardparameter "oldValue" und "newValue" werden in willSet/didSet nicht erkannt

Ich schreibe gerade Swift 3-Code in Xcode 8. 

Wenn Sie oldValue- und newValue-Standardparameter in den willSet- und didSet-Blöcken verwenden, erhalte ich einen "unresolved identifier"-Compiler-Fehler.

Ich habe einen sehr grundlegenden Code wie folgt

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

Apple-Dokumentation für Swift 3 scheint diese Funktion noch zu unterstützen. Ich hoffe, hier fehlt mir nichts?

16
Adithya

Sie können auch vc verwenden:

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)")
    }
}

Die spezielle Variable newValue funktioniert nur innerhalb von willSet, während oldValue nur innerhalb von didSet funktioniert.

Die durch ihren Namen referenzierte Eigenschaft (in diesem Beispiel vc) ist weiterhin an den alten Wert in willSet und an den neuen Wert in didSet gebunden.

8
Robin Stewart

Sie haben nicht versucht, die Variable mit einem neuen Objekt zu initialisieren, durch das Sie Ihre Clojure setzen können:

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

Es ist wichtig zu wissen, dass die spezielle Variable newValue nur innerhalb von willSet funktioniert, während oldValue nur innerhalb von didSet funktioniert.

var vc: UIViewController? {
    willSet {
        // Here you can use vc as the old value since it's not changed yet
        print("New value is \(newValue)")
    }
    didSet {
        // Here you can use vc as the new value since it's already DID set
        print("Old value is \(oldValue)") 
    }
}
0
Wissa