Wegen Swifts Mangel an Kovarianz brauchte ich eine Umgehungslösung. Ich komme aus der Java-Welt, also habe ich instinktiv versucht, eine Einschränkung von einem Typ zu einem anderen generischen Typ zu erzeugen.
Also habe ich die folgende Klasse geschrieben:
%Vor% Ich habe erwartet, dass das gut funktioniert. Ich habe die T
definiert und CHILD
sollte eine Unterklasse von T
sein. Der Swift-Compiler ist jedoch anderer Meinung und zeigt den folgenden Fehler in der Zeile mit init<CHILD: T>
.
Vererbung von Nicht-Protokoll, Nicht-Klassen-Typ 'T'
Ich habe die generische Parametervererbung auch in verschiedenen Szenarien versucht. Hinzufügen der folgenden Methode in die Klasse (und Entfernen der Init, die den Kompilierungsfehler verursachte).
%Vor%Dies ergibt im Grunde die gleiche Ausgabe.
Geben Sie "T" als Nicht-Protokolltyp "OTHER"
ein
Alles, was ich vielleicht getan habe, hat nicht funktioniert und endete mit einer ähnlichen Fehlermeldung. Ist das ein Fehler in Swift? Oder fehlt mir etwas? Oder ist es ein Feature von Swift und wird nie funktionieren, wie ich dachte?