我正在将一个项目转换为Swift代码,并在setter中遇到了一个问题.我的Objective-C代码看起来像这样:
- (void)setDocument:(MyDocument *)document
{
if (![_document isEqual:document]) {
_document = document;
[self useDocument];
}
}
Run Code Online (Sandbox Code Playgroud)
并允许我的View Controller在每次设置文档时运行它(通常在prepareForSegue:呈现View Controller 的方法中).
我找到了属性观察者willSet,didSet但它们只在更新属性时才起作用,而不是在初始化和更新时.
有任何想法吗?谢谢
UPDATE
尝试get {}并设置{}后,我收到EXC_BAD_ACCESS错误
var document: UIDocument? {
get {
return self.document!
}
set {
self.document = newValue
useDocument()
}
}
Run Code Online (Sandbox Code Playgroud)
Mik*_*e S 47
你不能这样使用set,因为当你打电话给self.document = newValue你时,你只是再次打电话给二传手; 你创造了一个无限循环.
你需要做的是创建一个单独的属性来实际存储值:
private var _document: UIDocument? = nil
var document: UIDocument? {
get {
return self._document
}
set {
self._document = newValue
useDocument()
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个Swift 3版本
var document : UIDocument? {
didSet {
useDocument()
}
}
Run Code Online (Sandbox Code Playgroud)