Swift-Versand zum Überschreiben von Methoden in Unterklassenerweiterungen
Überschreibende Methodensignaturen in Erweiterungen scheinen in bestimmten Fällen zu unvorhersehbaren Ergebnissen zu führen. Das folgende Beispiel zeigt zwei unterschiedliche Ergebnisse mit einem ähnlichen Muster.
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()
Dies druckt:
dothing super class
viewdidload subclass
viewdidload superclass
Sie können sehen, dass das @ übersprungen wiB
's Implementierung vondoThing
wenn es als @ besetzt iA
enthält jedoch beide Implementierungen vonviewDidLoad
wenn als @ besetUIViewController
. Ist das das erwartete Verhalten? Wenn ja, woran liegt das?
ENV: Xcode 7.3, Spielplatz