我可以在Swift的get块中设置计算属性吗?

时间:2020-01-05 22:39:09

标签: swift computed-properties

var myProperty: PropertyType {
 get {
     if let alreadyComupted = savedValue {
       return alreadyComputed
     }
    return computeAndSave(someParam: "Hello")
 }
 set {
// is it possible to move *computeAndSave* body here somehow so I can call *set* method in above get definition?
 }
}

private var savedValue: PropertyType?
private func computeAndSave(someParam: SomeType) -> PropertyType {
// perform computations and assign value to *savedValue*
}

我对快速语言还很陌生,不确定通过编码实践这是否是标准。

1 个答案:

答案 0 :(得分:0)

基本上,您正在描述一个lazy变量。首次获取值时,它将计算其初始化程序 ,然后从此开始使用存储的值(除非将其替换)。您可以将其与定义并调用初始化程序结合使用:

lazy var myProperty: PropertyType = {
    let p = // perform some expensive one-time calculation here
    return p
}()

结果是,您第一次 要求输入myProperty的值时,初始化方法将运行;但是之后,使用先前的结果,并且初始化方法永远不会再次运行。

相关问题