質問
Appleのドキュメントでは、次のように指定されています。
プロパティが最初に初期化されるときに、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
常に呼び出されることがわかります。これが全体的に良いかどうかはまだ決めていませんが、自分の状況によく合います。
defer
:convenience init(someProperty: AnyObject) { self.init() defer { self.someProperty = someProperty }