是否可以允许在Swift初始化期间调用didSet?
题
苹果的文档指定:
首次初始化属性时,不会调用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
}
}
我创建了method doStuff
,以使处理调用更简洁,但我只想处理didSet
函数中的属性。有没有办法在初始化过程中强制此调用?
更新资料
我决定只为我的类删除便捷的初始化器,并强迫您在初始化后设置属性。这使我知道didSet
将永远被调用。我还不确定总体上是否更好,但这很适合我的情况。
回答:
创建一个自己的set-Method并在init-Method中使用它:
class SomeClass { var someProperty: AnyObject! {
didSet {
//do some Stuff
}
}
init(someProperty: AnyObject) {
setSomeProperty(someProperty)
}
func setSomeProperty(newValue:AnyObject) {
self.someProperty = newValue
}
}
通过声明
someProperty
为type :(AnyObject!
一个隐式解包的可选),可以让self完全初始化而无需
someProperty
设置。打电话时,setSomeProperty(someProperty)
您叫的等价物
self.setSomeProperty(someProperty)
。通常,您将无法执行此操作,因为self尚未完全初始化。由于
someProperty
不需要初始化,并且您正在调用依赖于self的方法,因此Swift会离开初始化上下文,并且didSet将运行。
以上是 是否可以允许在Swift初始化期间调用didSet? 的全部内容, 来源链接: utcz.com/qa/409974.html