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*
}
我对快速语言还很陌生,不确定通过编码实践这是否是标准。
答案 0 :(得分:0)
基本上,您正在描述一个lazy
变量。首次获取值时,它将计算其初始化程序 ,然后从此开始使用存储的值(除非将其替换)。您可以将其与定义并调用初始化程序结合使用:
lazy var myProperty: PropertyType = {
let p = // perform some expensive one-time calculation here
return p
}()
结果是,您第一次 要求输入myProperty
的值时,初始化方法将运行;但是之后,使用先前的结果,并且初始化方法永远不会再次运行。