我想覆盖以下类中的属性。假设我有一个类 A
,它有一个 bool 属性 r
。对于父类(super class)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)
最佳答案
我同意@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"
关于swift - 覆盖 Swift 3 中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44788987/