7ba*_*all 1 inheritance getter-setter swift
我想覆盖以下类中的属性.假设我有一个A具有布尔属性的类r.对于超类A,我希望r被设置并获得正常.对于子类B,我想r永远是false.我不确定为什么这比它应该更难......
class A {
init(r: Bool) {
self.r = r
}
var r: Bool {
willSet(n) {
r = n
}
get {
return r
}
}
}
class B: A {
override var r: Bool {
willSet(n) {
r = n
}
get {
return false
}
}
}
let a = A(r: true)
a.r = false
print(a.r) // prints 'false', which is good
let b = B(r: true)
print(b.r) // prints 'true'
b.r = false // ERROR: I can't get pass this point 'Execution was interrupted on playground
print(b.r)
Run Code Online (Sandbox Code Playgroud)
我同意@Hamish:基类中的存储属性,带有计算属性覆盖.除外,只读属性不能覆盖可变属性.但是,你可以让被覆盖的setter什么也不做,被覆盖的getter返回你想要的东西.
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"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1132 次 |
| 最近记录: |