こちらの記事がよくまとまっていてわかりやすかったです。

以下、個人的な備忘録です。

  • lazyをつけたプロパティはLazy Stored Propery(遅延格納型プロパティ)という
  • Lazy Stored Propertyは、クラスや構造体を初期化する時点では初期化されず、初めてアクセスされた時に初期化される
  • letlazyはつけられない
    • letはクラスまたは構造体の初期化が完了した時点で初期値を持っておかないといけないため
  • Lazy Stored Propertyではプロパティ監視が使えない
  • Lazy Stored Propertyの初期化時には、それを持つクラス・構造体が初期化されているので、selfを使うことができる
  • 初期化にコストがかかるクラスや構造体のインスタンスを初期化してプロパティに持たせるという時に使うといい
    • そうすることで自身の初期化のコストを抑えられる
  • 自身を初期化した結果を踏まえてプロパティの初期値を設定したい時に使うといい
    • selfが使えるため

リファレンス

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html#//apple_ref/doc/uid/TP40014097-CH14-ID257