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
看懂了吧