Lazy方法
Swift标准库有一组lazy
方法,或者说是计算属性,可以把map
和filter
这类接受闭包运行的方法实现延时运行。对于运行代价很大的情况,它可以起到不小的性能提升作用。 本来不使用lazy是这样的:
let data = 1 ... 3 let result = data.map { (a) -> Int in print("正在处理\(a)") return a * a } print("准备访问结果") for i in result.reversed() { print("操作后的结果为\(i)") } print("操作完毕")
打印结果为:
正在处理1
正在处理2
正在处理3
准备访问结果
操作后的结果为9
操作后的结果为4
操作后的结果为1
操作完毕
在没有lazy时,map会按顺序直接运行闭包。 下面先取其lazy结果,后再map:
let data = 1 ... 3 let result = data.lazy.map { (a) -> Int in print("正在处理\(a)") return a * a } print("准备访问结果") for i in result.reversed() { print("操作后的结果为\(i)") } print("操作完毕")
打印结果为:
准备访问结果
正在处理3
操作后的结果为9
正在处理2
操作后的结果为4
正在处理1
操作后的结果为1
操作完毕
lazy后,可以在实际访问序列元素时,才执行闭包运算。