ゲッターやセッターで作業していないときに、怠惰なキーワードの意味を疑問に思っています。このコードを見てください:スウィフト3の役割getterのない怠惰な変数
class ViewController: UIViewController
{
lazy var toto = 5
}
コンパイラはlazyキーワードを受け入れますが、その理由はわかりません。レイジーは、私が読む時だけ計算される値を意味します。しかし、整数値のために何かを計算する必要はありません。
ゲッターやセッターで作業していないときに、怠惰なキーワードの意味を疑問に思っています。このコードを見てください:スウィフト3の役割getterのない怠惰な変数
class ViewController: UIViewController
{
lazy var toto = 5
}
コンパイラはlazyキーワードを受け入れますが、その理由はわかりません。レイジーは、私が読む時だけ計算される値を意味します。しかし、整数値のために何かを計算する必要はありません。
lazy
は格納されたプロパティの初期値を(したがって、これは実際計算特性と共に用いられるゲッター またはセッターとは無関係である)を評価し、最初のアクセスに割り当てられていることを意味します。
lazy var toto = ... some expression evaluating to an `Int` ...
は怠惰Int
プロパティを定義します。
lazy
は、プロパティが必要になるまで、初期値 の評価を遅らせるために使用できます。その評価が 「高価」であるか副作用がある場合。
しかし、言語/コンパイラの観点からは、右側の初期値 は任意の式にすることができます。 関数呼び出しに関連する定数または "複雑な"式であれば問題ありません。
lazy var a = 5 // A constant
lazy var b = someFunctionReturningAnInt() // Function call
lazy var c = { _ -> Int in
return 42
}() // Immediately evaluated closure
はすべて有効な定義です。一定の初期値でlazy
を使用する利点はありませんが、Swiftは有効です。
新しいクラス変数を初期化するには、lazyを使用する必要があります。 official Swift guideは以下のように、要約が非常に良い例を示します:
class DataImporter {
init() {
//importing data, non-trivial task
}
}
class DataManager {
lazy var dataImporter = DataImporter()
init() {
//here, dataImporter is not yet created because it is lazy to move its ass~
}
let manager = DataManager() // manager.dataImporter is NOT created yet
manager.dataImporter //ONLY now it is created
を使用すると、クラス変数とはどういう意味ですか?迅速に模範を教えてもらえますか? – Bob5421
ここに行く.... –