我可以在 Swift 中的 get 块中设置计算 属性 吗?
Can I set computed property in get block in Swift?
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*
}
我对 swift 语言还很陌生,不确定这是否是编码实践的标准。
基本上您是在描述一个 lazy
变量。当第一次获取值时,它计算它的初始值设定项一次,并从那时起使用存储的值(除非它被替换)。您可以将其与定义和调用初始化程序结合使用:
lazy var myProperty: PropertyType = {
let p = // perform some expensive one-time calculation here
return p
}()
结果是 第一次 请求 myProperty
的值时,初始化方法运行;但是之后使用了之前的结果,初始化方法再也不会运行了。
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*
}
我对 swift 语言还很陌生,不确定这是否是编码实践的标准。
基本上您是在描述一个 lazy
变量。当第一次获取值时,它计算它的初始值设定项一次,并从那时起使用存储的值(除非它被替换)。您可以将其与定义和调用初始化程序结合使用:
lazy var myProperty: PropertyType = {
let p = // perform some expensive one-time calculation here
return p
}()
结果是 第一次 请求 myProperty
的值时,初始化方法运行;但是之后使用了之前的结果,初始化方法再也不会运行了。