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