переопределение меток в расширениях, по-видимому, приводит к непредсказуемым результатам в некоторых случаях. Следующий пример демонстрирует два разных результата с похожим шаблоном.
class A: UIViewController {
func doThing() {
print("dothing super class")
}
override func viewDidLoad() {
print("viewdidload superclass")
super.viewDidLoad()
}
}
class B: A { }
extension B {
override func doThing() {
print("dothing sub class")
super.doThing()
}
override func viewDidLoad() {
print("viewdidload subclass")
super.viewDidLoad()
}
}
let a: A = B()
a.doThing()
let vc: UIViewController = B()
vc.viewDidLoad()
Отпечатки:
dothing super class
viewdidload subclass
viewdidload superclass
Вы можете увидеть, что это пропускает реализацию B
doThing
, когда она отлита как A
, однако включает обе версии viewDidLoad
при передаче как UIViewController
. Это ожидаемое поведение? Если да, то в чем причина этого?
ENV: Xcode 7.3, игровая площадка