swift属性的延迟加载你一定不陌生
lazy var str:String = "Hello"
而我们今天关注的不是这个,而是延迟加载方法。
在swift的标准库中有一组lazy方法,它们是这样定义的:
func lazy<S:SequenceType>(s:S) -> LazySequence<S>
func lazy<S:CollectionType where S.Index : RandomAccessIndexType>(s:S) -> LazyRandomAccessCollection<S>
还有很多。。。
这些方法可以配合map filter flatten() 等方法使用
使用map时你可能会这样写
let data = 1...3
let result = data.map {
(i:Int)->Int in
print("正在处理 \(i)")
return i+1
}
for i in result {
print("resylt\(i)")
}
你这么做的输出为:
#正在处理 1
#正在处理 2
#正在处理 3
#2
#3
#4
可以看到map会一次性把所有数据准备好。
而我们如果使用lazy
let data = 1...3
let result = data.layz.map { //layz
(i:Int)->Int in
print("正在处理 \(i)")
return i+1
}
for i in result {
print("resylt\(i)")
}
输出结果:
#正在处理 1
#2
#正在处理 2
#3
#正在处理 3
#4
看懂了吧