【发布时间】:2014-10-03 13:03:06
【问题描述】:
问题
Apple's docs 指定:
第一次初始化属性时不会调用 willSet 和 didSet 观察者。仅当属性的值在初始化上下文之外设置时才会调用它们。
是否可以在初始化期间强制调用这些?
为什么?
假设我有这门课
class SomeClass {
var someProperty: AnyObject {
didSet {
doStuff()
}
}
init(someProperty: AnyObject) {
self.someProperty = someProperty
doStuff()
}
func doStuff() {
// do stuff now that someProperty is set
}
}
我创建了方法doStuff,以使处理调用更简洁,但我宁愿只处理didSet 函数中的属性。有没有办法在初始化期间强制它调用?
更新
我决定只删除我的类的便利初始化程序,并强制您在初始化后设置属性。这让我知道didSet 将始终被调用。我还没有决定这是否总体上更好,但它很适合我的情况。
【问题讨论】:
-
老实说,最好只是“接受这就是 swift 的工作方式”。如果您在 var 语句上放置一个内联初始化值,那当然不会调用“didSet”。这就是为什么“init()”情况也不能调用“didSet”。这一切都说得通。
-
@Logan 这个问题本身回答了我的问题;)谢谢!
-
如果你想使用便捷初始化器,可以和
defer结合使用:convenience init(someProperty: AnyObject) { self.init() defer { self.someProperty = someProperty }