为什么这段代码在init时会触发didSet
final public class TestDidSet {
static var _shared: TestDidSet! = TestDidSet()
func testA() { }
private var test = true {
didSet {
print("didSet test when initing!!!!!:\(test)")
}
}
private var _value: Bool! {
didSet {
print("didSet when initing!!!!!:\(_value)")
}
}
private init() {
testSet()
_value = false
test = false
}
private func testSet() {
_value = true
}
}
TestDidSet._shared.testA()知道吗?它不应该触发didSet吗?救命啊!
更新:我的观点是,testSet()和_value = false在做同样的事情,但是testSet()在init()之外,所以testSet()会触发didSet,而_value = false不会触发didSet。为什么?!
我想,不是可选的类型或其他原因造成的。
发布于 2016-05-25 10:55:26
当您使用隐式未包装的可选类型(在本例中为Bool!)声明属性时,它将被隐式分配为nil的默认值。然后,如果使用初始化器中的其他值为其赋值,则会触发didSet观察者,因为它已经是第二个赋值。didSet不应该只在第一次触发。
发布于 2016-05-25 12:02:43
didSet{}闭包每次为属性分配一个新值时都称为(即使在声明(内联)或初始化时也是如此)。
https://stackoverflow.com/questions/37434418
复制相似问题