是否可以允许在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

回到顶部