我目前正在Xcode 8中编写Swift 3代码。
在oldValue
和newValue
块中使用willSet
和didSet
默认参数时,我收到"unresolved identifier"
编译错误。
我有一个非常基本的代码,如下所示
var vc:UIViewController? {
willSet {
print("Old value is \(oldValue)")
}
didSet(viewController) {
print("New value is \(newValue)")
}
}
对于Swift 3来说,Apple Documentation似乎仍然支持这些功能。 我希望我在这里不遗漏任何东西?
答案 0 :(得分:39)
您还可以使用vc
:
var vc:UIViewController? {
willSet {
print("New value is \(newValue) and old is \(vc)")
}
didSet {
print("Old value is \(oldValue) and new is \(vc)")
}
}
答案 1 :(得分:13)
特殊变量newValue
仅在willSet
中有效,而oldValue
仅在didSet
中有效。
其名称所引用的属性(在本示例中为vc
)仍然绑定到willSet
中的旧值,并绑定到didSet
中的新值。
答案 2 :(得分:12)
var vc:UIViewController? {
willSet {
print("New value is \(newValue)")
}
didSet {
print("Old value is \(oldValue)")
}
}
答案 3 :(得分:1)
您没有尝试使用可以设置clojure的新对象初始化变量:
var vc:UIViewController? = UIViewController(){
willSet {
print("Old value is \(oldValue)")
}
didSet(viewController) {
print("New value is \(newValue)")
}
}
答案 4 :(得分:1)
重要的是要知道特殊变量newValue
仅在willSet
中有效,而oldValue
仅在didSet
中有效。
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)")
}
}
答案 5 :(得分:-1)
这就是为什么我们使用NSKeyValueObservation监视类对象的原因