0
次のクラスのプロパティをオーバーライドします。ブール値のプロパティr
を持つクラスA
があるとします。スーパークラスA
については、r
を設定して正常に取得します。サブクラスB
については、r
は常にfalse
になります。私はこれがなぜ必要なよりも難しいのか分かりません...Swiftのオーバーライドプロパティ3
次のクラスのプロパティをオーバーライドします。ブール値のプロパティr
を持つクラスA
があるとします。スーパークラスA
については、r
を設定して正常に取得します。サブクラスB
については、r
は常にfalse
になります。私はこれがなぜ必要なよりも難しいのか分かりません...Swiftのオーバーライドプロパティ3
私は、@Hamish:計算されたプロパティオーバーライドを持つベースクラスのストアドプロパティに同意します。ただし、読み取り専用プロパティは変更可能なプロパティをオーバーライドできません。しかし、オーバーライドされたセッターは何もせず、オーバーライドされたゲッターはあなたが望むものを返すことができます。
class A {
init(r: Bool) {
self.r = r
}
var r: Bool
}
class B: A {
override var r: Bool {
set {}
get {
return false
}
}
}
let a = A(r: true)
print(a.r) // "true"
a.r = false
print(a.r) // "false"
let b = B(r: true)
print(b.r) // "false"
b.r = true
print(b.r) // "false"
コードはコンパイルされません。計算されたプロパティでプロパティオブザーバ( 'willSet')を使用することはできません。そして、コンパイルしたとしても、 'get {return r}'は再帰的ループを引き起こし、 'willSet'の実装は何もしません。おそらく、基本クラスに格納されたプロパティだけが必要で、サブクラスでは計算されたプロパティが上書きされます。 – Hamish
格納されたプロパティを使用し、サブクラスでの計算でオーバーライドする方法を詳しく説明できますか?サブクラスで 'r'を常に' false'にします。 – 7ball
「関連する」セクションで同様の質問を確認しましたか? –