コード スニペットから始めましょう。
St Foo {
var proA: Int = 0 { // needs initialization
willSet {
print("about to set proA to \(newValue) from \(proA)")
}
didSet {
print("already set proA to \(proA) from \(oldValue)")
}
}
var ProB: Int { // do not needs initialization
return 1
}
}
let foo = Foo()
foo.proA = 23
print(foo.ProB)
保存および計算されたプロパティに関する私の個人的な理解の一部を次に示します。
a: オブザーバーのみを持つプロパティ (willSet および didSet) は、計算されたプロパティではなく、格納されたプロパティです (例: 上記のコードのproAプロパティ)。
b: 計算されたプロパティには初期化があってはなりません (上記のコードのコメントを参照してください)。
c: セッターはプロパティ オブザーバーと同じようなものです。プロパティ オブザーバーは、変更前と変更後のセッター + オブザーバーです。
質問:
1.プロパティを計算プロパティにする理由は何ですか? プロパティにゲッターがあり、計算されたプロパティであるというのは正しいですか?
2.私の理解 (a、b、c) はすべて正しいですか? そうでない場合は、ご指摘いただければ幸いです。
3.計算されたプロパティを初期化できないのはなぜですか? (下の図を参照してください) そして、そうすると、コンパイラは警告を出します Cannot call value of none-function type "int"このエラーの意味は何ですか?
どうもありがとう。