我的問題是如何處理的財產繼承方法,如set
,get
,didSet
,willSet
......?繼承
讓我們舉個例子:我想覆蓋Swift類中屬性的setter方法。下面是我想要實現(這顯然是不工作)什麼:
class A {
var value: Int {get {...} set {...} }
}
class B: A {
var value: Int {
set(newValue) {
// do some fancy stuff...
}
}
}
這不是工作,太:
// in class B
override func setValue(newValue: Int) {
// do some fancy stuff...
}
我們可以在斯威夫特是這樣做的:
class A {
var _value: Int = 0
var value: Int {
get {
return _value
}
set {
_value = newValue
}
}
}
class B: A {
override var value: Int {
get {
return _value
}
set {
_value = newValue + 1
}
}
}
let a = A()
a.value = 1
print(a.value) // => 1
let b = B()
b.value = 1
print(b.value) // => 2
這種方法不是很優雅,因爲我必須實現getter方法,這實際上不是必需的,因爲只有setter方法應該被覆蓋。
在你的第一個例子中,基類屬性存儲,而子類一個計算,他們有爲了與重寫做任何事情都是一樣的。 – Kametrixom
你說得對,這只是爲了表達目標。 –
@Kametrixom雖然確實無法用已存儲的屬性覆蓋已計算的屬性,但也可以使用其他方法。 – Qbyte