我正在将项目转换为Swift代码,并在setter中遇到了一个问题。我的Objective-C代码看起来像这样:
- (void)setDocument:(MyDocument *)document
{
if (![_document isEqual:document]) {
_document = document;
[self useDocument];
}
}
并允许我的View Controller在每次设置文档时运行它(通常在呈现视图控制器的prepareForSegue:
方法中)。
我找到了属性观察者willSet
和didSet
,但它们仅在更新属性时才起作用,而不是在初始化和更新时。
有什么想法吗?感谢
更新
尝试获取{}并设置{}后,我收到EXC_BAD_ACCESS
错误
var document: UIDocument? {
get {
return self.document!
}
set {
self.document = newValue
useDocument()
}
}
答案 0 :(得分:47)
你不能那样使用set
,因为当你致电self.document = newValue
时,你只是再次呼叫二传手;你已经创造了一个无限循环。
您需要做的是创建一个单独的属性来实际存储值:
private var _document: UIDocument? = nil
var document: UIDocument? {
get {
return self._document
}
set {
self._document = newValue
useDocument()
}
}
答案 1 :(得分:8)
这是一个Swift 3版本
var document : UIDocument? {
didSet {
useDocument()
}
}