2015-09-20 12 views
5

Ich lerne Generika in Swift. Und verstehe nicht, was falsch läuft.Generic Swift IOS "ist kein Untertyp von" Code Kompilierungsfehler

Jeder, bitte erläutern, wie kann ich generische Vorlage in eine andere Vorlage einfügen.

Erklärung BasePresenter Klasse sieht aus wie

class BasePresenter<VIEW : BaseView>{ 

Code mit Fehler unten auf dem Bild:

*UPD*

+0

Warum Sie Moderator erklärt haben, als eine Anordnung? Irgendwelche Gründe? Sieht so aus, als wolltest du nur var presenter: PRESENTER? – Shripada

+0

@Shripada, danke für die Antwort. Ja, es ist mein Fehler. Machte es als einzelnes Objekt. Aber es löst das Problem nicht –

+0

können Sie Ihre Frage mit dem richtigen Screenshot aktualisieren? Der Screenshot zeigt immer noch den falschen Code – Shripada

Antwort

0

In der Klassendeklaration, die Sie die Art scheinen einzuführen, dh VORFÜHRER ist unerwünscht. Ich bin nicht sicher, warum der Compiler diese partielle Typdeklaration zwar zulässt und später korrekt einen Fehler gibt, wenn Sie versuchen, eine Variable mit einem solchen partiellen Typ zu erstellen. Die Abhilfe für jetzt ist diese Art zu vermeiden und direkt Ihren Moderator Variable deklariert vom Typ BasePresenter sein, oder Ihre VORFüHRER Art stellt eine Art Alias:

Etwas wie-

class BaseViewController <VIEW: BaseView> : UIViewController, BaseView{ 

typealias PRESENTER = BasePresenter<VIEW>! 
var presenter : PRESENTER! 

//Rest of the class body... 
} 
+1

Danke für die Antwort. Der Vererber von 'BaseViewController' sollte jedoch eine Instanz des Vererbers von 'BasePresenter' in der Variablen 'var presenter' haben. Wie kann ich es tun? –

+0

Warum möchten Sie das tun? Sie können dem Presenter einen beliebigen Untertyp des BasePresenter zuweisen. – Shripada

+1

@Shripada Also können wir diese Variable als die spezifische 'PRESENTER'-Implementierung verwenden und ihre Methoden direkt aufrufen, ohne den' BasePresenter 'auf den 'PRESENTER' in einer Unterklasse von' BaseViewController' zu übertragen. – shelll

Verwandte Themen