Envio rápido para métodos substituídos em extensões de subclasse
substituir assinaturas de método em extensões parece produzir resultados imprevisíveis em certos casos. O exemplo a seguir demonstra dois resultados diferentes com um padrão semelhante.
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()
Isso imprime:
dothing super class
viewdidload subclass
viewdidload superclass
Você pode ver isso pular oB
implementação dedoThing
quando é lançado comoA
, no entanto, inclui as duas implementações deviewDidLoad
quando lançado comoUIViewController
. Este é o comportamento esperado? Se sim, qual o motivo disso?
ENV: Xcode 7.3, Parque infantil