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后,可以在实际访问序列元素时,才执行闭包运算。

相关文章:

  • 2021-09-11
  • 2021-09-28
  • 2021-07-12
  • 2021-10-17
  • 2021-07-12
  • 2021-09-10
  • 2022-12-23
猜你喜欢
  • 2021-09-14
  • 2022-12-23
  • 2021-08-27
  • 2021-06-04
  • 2021-11-25
  • 2021-09-10
  • 2021-11-22
相关资源
相似解决方案