Swift标准库有一组lazy
方法,或者说是计算属性,可以把map
和filter
这类接受闭包运行的方法实现延时运行。对于运行代价很大的情况,它可以起到不小的性能提升作用。 本来不使用lazy是这样的:
let data = 1 ... 3let 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 ... 3let 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后,可以在实际访问序列元素时,才执行闭包运算。