我了解惰性变量的工作原理,但我不知道如何正确实现。 下面仅是一个示例:
func calculation() -> (firstValue: Float, secondValue: Float) {
var a: Float = 2
var b: Float = 2
for i in 1...1000 {
a = a + Float(i)
b = b + Float(i)
print(i)
}
return (a, b)
}
let m = calculation().firstValue
let n = calculation().secondValue
当我运行它时,计算函数运行了两次(1000次+ 1000次),第一次将值获取为m,第二次获取n值。
我必须采取什么措施来强制功能 Calculation 不仅不运行时间,而且存储值m和n而不重复两次。
答案 0 :(得分:2)
lazy
关键字用于class / struct / enum成员变量。
对于您的示例,您可以这样实现:
class Solution {
lazy var tuple: (firstValue: Float, secondValue: Float) = {
var a: Float = 2
var b: Float = 2
for i in 1...1000 {
a = a + Float(i)
b = b + Float(i)
print(i)
}
return (a, b)
}()
}
let s = Solution()
let m = s.tuple.firstValue
let n = s.tuple.firstValue
tuple
变量存储以下闭包返回的值,该闭包仅运行一次。
您还可以使用变量来记录函数的返回值。
let pair = calculation()
let m = pair.firstValue
let n = pair.secondValue
答案 1 :(得分:2)
${isFree}
是用于延迟计算直到首次使用结果的关键字,因此不适合您的情况。
您可以这样写:
lazy
或者这个:
let values = calculation()
let m: Float = values.firstValue
let n: Float = values.secondValue