Может кто-нибудь объяснить поведение при наследовании свойств?Я уверен, что есть хорошее объяснение того, почему переопределение фактически не переопределяет свойство.
Почему Swift допускает переопределение свойства surname
, но, по-видимому, все еще использует свойство суперкласса и связанные функции?Они не переопределяются.
Может показаться, что мне нужно определить некоторую функцию, которая вызывается в методе didSet()
, и переопределить ее, чтобы подкласс не наследовал функцию суперкласса, как в telephone
property.
Есть ли способ переопределить метод didSet()
свойства?Создание вызываемой функции, кажется, добавляет ненужную дополнительную сложность?
Как правильно достичь этого?
import Cocoa
class BaseClass {
var _name: String?
var name: String? {
get {
return _name
}
set {
_name = newValue
print("BaseClass \(name)")
}
}
var surname: String? {
didSet {
print("BaseClass \(surname)")
}
}
var telephone: String? {
didSet {
telephoneSet()
}
}
func telephoneSet(){
print("BaseClass \(telephone)")
}
}
class SubClass: BaseClass {
override var name: String? {
get {
return _name
}
set {
_name = newValue
print("SubClass \(name)")
}
}
override var surname: String? {
didSet {
print("SubClass \(surname)")
}
}
override func telephoneSet(){
print("SubClass \(telephone)")
}
}
let object = SubClass()
object.name = "Jenny"
object.surname = "Jones"
object.telephone = "10810"
Создает следующий вывод:
SubClass Optional("Jenny")
BaseClass Optional("Jones")
SubClass Optional("Jones")
SubClass Optional("10810")