レイジーストアドプロパティとは
アクセスされるまで初期化を遅延させるプロパティです。
基本構文
lazy var インスタンスプロパティ名: プロパティの型 = 式
static lazy var スタティックプロパティ名: プロパティの型 = 式
サンプルコード
struct SomeStruct {
var value: Int = {
print("valueの値を生成します")
return 1
}()
lazy var lazyValue: Int = {
print("lazyValueの値を生成します")
return 2
}()
}
var someStruct = SomeStruct()
print("インスタンスを作成")
print("valueのアクセス", someStruct.value)
print("lazyValueのアクセス", someStruct.lazyValue)
// 出力
valueの値を生成します
インスタンスを作成
valueのアクセス 1
lazyValueの値を生成します
lazyValueのアクセス 2
メリット
上の結果より、レイジーストアドプロパティはアクセスしたときに初期化されることがわかりました。
レイジーストアドプロパティを利用することで、初期化コストの高いプロパティの初期化をアクセスまで引き伸ばし、アプリのコスパを向上させることができます。
通常、ストアドプロパティの初期化時に、他のプロパティやメソッドを利用することはできません。
しかし、レイジーストアドプロパティはインスタンス生成より後に行われるため、初期化時に他のプロパティやインスタンスにアクセスすることができます。
struct SomeStruct {
var value = 1
lazy var lazyValue = double(of: value)
func double(of value: Int) -> Int {
return value * 2
}
}
参考
[増補改訂第3版]Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 (WEB+DB PRESS plusシリーズ)