map,filterのパフォーマンスを最適化するために使用される。
指定したコレクション型や要素が使われるまで評価しないようにしてくれる(遅延評価)
通常であればmap,filterは新しいシーケンスを生成するため余計にシーケンスを作成してしまう可能性がある。
パフォーマンスの低下に繋がる恐れがある。
そこでlazyの出番になる
let lazySequence = array.lazy.map{$0 + 1}
let mapSequence = Array(lazySequence)//この時に発火する
mapの後に記述して、,クロージャーの中の処理をキャッシュしてくれる。それをすることによって、
mapの処理が遅延し、必要なときだけ発火するようになる
lazyStoredProperties
lazyキーワードをストアドプロパティを宣言する前に記述してあげる
同様に必要なときだけしか呼ばれない。
インスタンス化したときに評価はされず、実際にプロパティにアクセスされた時に評価される。
struct Animal {
lazy var name: String = {
print("初期化が実行されました!")
return "Cat"
}()
}
// インスタンス化しても評価されない
var animal = Animal()
print("インスタンス化")
// プロパティにアクセスして(遅れて)評価される。
let name = animal.name