Swift überschreiben Protokoll Methoden in Subklassen
Ich habe eine Basis-Klasse implementiert, dass eine Erweiterung, die entspricht, um ein Protokoll, wie unten:
protocol OptionsDelegate {
func handleSortAndFilter(opt: Options)
}
extension BaseViewController: OptionsDelegate {
func handleSortAndFilter(opt: Options) {
print("Base class implementation")
}
}
Habe ich eine Unterklasse "InspirationsViewController" erbt BaseViewController. Und ich bin übergeordnetes Protokoll-Methode in der Erweiterung wie folgt:
extension InspirationsViewController {
override func handleSortAndFilter(opt: Options) {
print("Inside inspirations")
}
}
Bin ich immer Fehler, wenn ich override "handleSortAndFilter" - Funktion in der Unterklasse Erweiterung: "Declerations in Erweiterungen nicht außer Kraft setzen kann" noch
Aber ich bin nicht zu sehen, ähnliches problem, wenn ich umgesetzt UITableView datasource und delegate-Methoden.
Wie Sie diesen Fehler vermeiden?
InspirationsViewController
ist nicht eine Unterklasse ist eine Erweiterung. Ich denke, man definiert es falsch. Es sollte ein KlasseInspirationsViewController: BaseViewController
- er sagte bereits
InspirationsViewController
ist Unterklasse vonBaseViewController
, ist diese Erweiterung für Sie. Dieses problem ist wohl noch nicht implementiert in Swift, die Sie tun sollten, überschreiben Sie von der main-Klasse, die Erweiterung ist für das hinzufügen von mehr Funktionalität - In der Erweiterung können wir nicht überschreiben Methoden der Oberklasse.
- Bitte poste die Klasse Definitionen auch. Der code wird kompiliert es gut hier hinzufügen
class BaseViewController: UIViewController{}
undclass InspirationsViewController: BaseViewController {}
. - Klasse Erklärung, dass Sie erwähnt haben, ist richtig.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie Protokoll-Erweiterung mit where-Klausel. Es funktioniert.
Soweit ich weiß, kann man nicht überschreiben von Methoden in extensions. Erweiterungen können nur Folgendes tun:
“Erweiterungen in Swift kann:
Auszug Aus: Apple Inc. "Die Swift-Programmiersprache Swift (3.0.1)."