Swift属性 - getter ivar

Ada*_*ter 10 getter swift

我们应该在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属性,而只需使用willSetdidSet.


Ant*_*nio 9

如果您要实现的是在设置属性时添加一些自定义处理,则无需定义单独的后备数据成员并实现计算属性:您可以使用willSetdidSet 属性观察器,它们分别在之前自动调用并且财产设置之后.

在您的具体情况下,这是您应该如何实现您的财产:

var document: UIDocument? {
    didSet {
        useDocument()
    }
}
Run Code Online (Sandbox Code Playgroud)

建议阅读:财产观察员