我们应该在Swift吸气剂中使用ivar属性吗?我的代码导致getter调用getter直到程序崩溃:
var document: UIDocument? {
get {
return self.document
}
set {
self.document = newValue
useDocument()
}
}
Run Code Online (Sandbox Code Playgroud)
Jac*_*nce 23
Swift属性没有像Objective-C那样的单独底层存储的概念.相反,您需要创建第二个(私有)属性并将其用作存储:
private var _document: UIDocument?
var document: UIDocument? {
get {
return _document
}
set {
_document = newValue
useDocument()
}
}
Run Code Online (Sandbox Code Playgroud)
如果您要设置useDocument()的document属性是在设置属性后调用,则可以省略getter,setter和private属性,而只需使用willSet或didSet.
如果您要实现的是在设置属性时添加一些自定义处理,则无需定义单独的后备数据成员并实现计算属性:您可以使用willSet和didSet 属性观察器,它们分别在之前自动调用并且在财产设置之后.
在您的具体情况下,这是您应该如何实现您的财产:
var document: UIDocument? {
didSet {
useDocument()
}
}
Run Code Online (Sandbox Code Playgroud)
建议阅读:财产观察员
| 归档时间: |
|
| 查看次数: |
7736 次 |
| 最近记录: |