Ich habe ein Problem mit Swift 2-Protokollerweiterungen mit Standardimplementierungen festgestellt. Der Grundgedanke ist, dass ich eine Standardimplementierung einer Protokollmethode bereitgestellt habe, die ich in einer Klasse überschreibe, die das Protokoll implementiert. Diese Protokollerweiterungsmethode wird von einer Basisklasse aufgerufen, die dann eine Methode aufruft, die ich in einer abgeleiteten Klasse überschrieben habe. Das Ergebnis ist, dass die überschriebene Methode nicht aufgerufen wird.
Ich habe versucht, das Problem auf den kleinstmöglichen Spielplatz zu bringen, der das Problem unten veranschaulicht.
%Vor%Leider haben Protokolle (noch) kein so dynamisches Verhalten.
Aber Sie können das (mit Hilfe von Klassen) tun, indem Sie commonBehavior()
in ParentClass
implementieren und in ChildClass
überschreiben. Du brauchst auch CommonThing
oder eine andere Klasse, um zu CommonTrait
zu passen, was dann die Oberklasse von ParentClass
ist:
Da dies nur eine kurze Lösung für Ihr Problem ist, hoffe ich, dass es in Ihr Projekt passt.
Ich habe ein Problem mit Swift 2-Protokollerweiterungen mit Standardimplementierungen festgestellt. Der Grundgedanke ist, dass ich eine Standardimplementierung einer Protokollmethode bereitgestellt habe, die ich in einer Klasse überschreibe, die das Protokoll implementiert. Diese Protokollerweiterungsmethode wird von einer Basisklasse aufgerufen, die dann eine Methode aufruft, die ich in einer abgeleiteten Klasse überschrieben habe. Das Ergebnis ist, dass die überschriebene Methode nicht aufgerufen wird.
Ich habe versucht, das Problem auf den kleinstmöglichen Spielplatz zu bringen, der das Problem unten veranschaulicht.
%Vor%Leider haben Protokolle (noch) kein so dynamisches Verhalten.
Aber Sie können das (mit Hilfe von Klassen) tun, indem Sie %code% in %code% implementieren und in %code% überschreiben. Du brauchst auch %code% oder eine andere Klasse, um zu %code% zu passen, was dann die Oberklasse von %code% ist:
%Vor%Da dies nur eine kurze Lösung für Ihr Problem ist, hoffe ich, dass es in Ihr Projekt passt.
Das ist Swifts Verhalten. Es kann gut oder schlecht sein, je nach Ihren Bedürfnissen. Schnelle Verwendung statischer Versand, also welche Methode aufgerufen wird, muss während der Kompilierung bekannt sein. Es gibt einige Vorteile und wie gewöhnlich einige Nachteile. Um zu sehen, wie Swift zur Zeit funktioniert, siehe nächstes sehr einfaches Beispiel. Für mich sieht es logisch aus ...
%Vor%Um meinen Mangel zu verstehen, verstehe ich, was das Wort "Yet" in einem unspezifischen Fehler bedeutet. Ich fand heraus, dass ich nicht scheinen kann, eine Funktion mit Argumenten zu schreiben, die erweiterte Funktion zu überschreiben, und der Compiler gibt mir einen solchen Fehler, aber wenn ich eine einfache Funktion ohne Argumente schreibe, eine benutzerdefinierte Implementierung mache und sie aufruft mit meiner überschriebenen "einfachen Funktion" funktioniert es:
%Vor%Das ist Swifts Verhalten. Es kann gut oder schlecht sein, je nach Ihren Bedürfnissen. Schnelle Verwendung statischer Versand, also welche Methode aufgerufen wird, muss während der Kompilierung bekannt sein. Es gibt einige Vorteile und wie gewöhnlich einige Nachteile. Um zu sehen, wie Swift zur Zeit funktioniert, siehe nächstes sehr einfaches Beispiel. Für mich sieht es logisch aus ...
%Vor%