Быстрая отправка переопределенных методов в расширениях подкласса
переопределение сигнатур методов в расширениях в некоторых случаях может привести к непредсказуемым результатам. В следующем примере демонстрируются два разных результата с похожим шаблоном.
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, детская площадка