延时加载或者说延时初始化时很常用的优化方法。
在特定环境下才会使用到的存储属性,可以使用 lazy
class ClassA {
// 延时初始化
lazy var str: String = {
let str = "Hello"
print("只在首次访问时输出")
return str
}()
// 如果不需要做什么额外的工作,可以简化成
lazy var str1: String = "hello1"
}
/*
lazy 可以结合 map/ filter 这类闭包并进行运行的方法一起,让这个行为变成延时进行的,对性能也是有不小的提升
*/
// 直接使用 map
//let data = 1...3
//let result = data.map { (i) -> Int in
// print("正在处理:\(i)")
// return i * 2
//}
//print("准备访问结果")
//for i in result {
// print("操作后结果为:\(i)")
//}
//print("操作完毕")
/*
输出为:
正在处理:1
正在处理:2
正在处理:3
准备访问结果
操作后结果为:2
操作后结果为:4
操作后结果为:6
操作完毕
*/
let data = 1...3
let result = data.lazy.map { (i) -> Int in
print("正在处理:\(i)")
return i * 2
}
print("准备访问结果")
for i in result {
print("操作后结果为:\(i)")
}
print("操作完毕")
/*
输出为:
准备访问结果
正在处理:1
操作后结果为:2
正在处理:2
操作后结果为:4
正在处理:3
操作后结果为:6
操作完毕
*/
// 总结: 对于那些不需要完全运行,肯恩提前退出的情况,使用 lazy 来进行性能优化效果会非常有效