2016-12-20 5 views
3

ゲッターやセッターで作業していないときに、怠惰なキーワードの意味を疑問に思っています。このコードを見てください:スウィフト3の役割getterのない怠惰な変数

class ViewController: UIViewController 
{ 
    lazy var toto = 5 
} 

コンパイラはlazyキーワードを受け入れますが、その理由はわかりません。レイジーは、私が読む時だけ計算される値を意味します。しかし、整数値のために何かを計算する必要はありません。

答えて

4

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は有効です。

1

新しいクラス変数を初期化するには、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 
+0

を使用すると、クラス変数とはどういう意味ですか?迅速に模範を教えてもらえますか? – Bob5421

+0

ここに行く.... –

関連する問題