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 Klasse InspirationsViewController: BaseViewController
  • er sagte bereits InspirationsViewController ist Unterklasse von BaseViewController , 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{} und class InspirationsViewController: BaseViewController {}.
  • Klasse Erklärung, dass Sie erwähnt haben, ist richtig.
InformationsquelleAutor Satyam | 2016-12-27
Schreibe einen Kommentar