Allgemeiner Parameter, eingeschränkt durch andere generische Parameter

8

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?

    
Tadeas Kriz 23.05.2015, 21:50
quelle

1 Antwort

0

Wenn Sie Factory<T> übergeben wollen, wo T vom Typ AnyObject ist, müssen Sie nur schreiben:

%Vor%

, weil T automatisch von Ihrer Klasse eingeschränkt wird.

    
Qbyte 23.06.2015 18:50
quelle

Tags und Links