Lazy方法

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

posted @ 2018-02-07 16:13  紫洁  阅读(427)  评论(0编辑  收藏  举报