プロジェクトをSwiftコードに変換していますが、セッターで問題に遭遇しました。Objective-Cコードは次のようになりました。
- (void)setDocument:(MyDocument *)document
{
if (![_document isEqual:document]) {
_document = document;
[self useDocument];
}
}
そして、ドキュメントが設定されるたびにView Controllerがこれを実行できるようにしました(通常はprepareForSegue:
提示するView Controllerのメソッド)。
プロパティオブザーバーwillSet
およびdidSet
が見つかりましたが、プロパティが更新されているときのみ機能し、初期化および更新されたときは機能しません。
何か案は?ありがとう
更新
get {}とset {}を試した後、EXC_BAD_ACCESS
エラー
var document: UIDocument? {
get {
return self.document!
}
set {
self.document = newValue
useDocument()
}
}
set
をそのように使用することはできません。なぜなら、self.document = newValue
もう一度セッターを呼び出しているだけです。無限ループを作成しました。
代わりに行う必要があるのは、値を実際に格納するための個別のプロパティを作成することです。
private var _document: UIDocument? = nil
var document: UIDocument? {
get {
return self._document
}
set {
self._document = newValue
useDocument()
}
}
Swift 3バージョン
var document : UIDocument? {
didSet {
useDocument()
}
}