私は怠惰な動作を迅速に理解しようとしています。次のコードはエラーなしでコンパイルされます。遅延変数を使用するとコンパイルエラーが発生する
import UIKit
class Test : UIViewController{
let i = 1
lazy var j:Int = self.i
}
私はJのタイプを削除すると、それは以下のコードのように推測させる、
import UIKit
class Test : UIViewController{
let i = 1
lazy var j = self.i
}
場合のに対し、私はタイプのコンパイルエラー」の値を取得する 『NSObjectの - >() - >テスト』していますno member 'i' "
誰かがコンパイラで何が起こっているのか説明できますか?ありがとう
で私は怠惰なVARを宣言する際にデータ型が必要とされているとは思いません。 '' lazy var name = "some name"というコードは問題なくコンパイルします。 –
ハードコードされた値を遅延型の変数に渡す場合、データ型のコンパイラはその型を理解するでしょう。は働いている。あなたのコードでは、自分自身の助けを借りてiの値を割り当てることを試みている値を直接割り当てません。コンパイラは自己、私と私のデータ型を知らない。だからこそ、データ型は、そのような場合や、あなたが怠惰なvarのクロージャを書く場合に必要です。 –