2016-04-06 9 views
2

Um es einfach zu setzen, ich habe eine generische Klasse Class1<X:Class2<Y>>, und so weit ich Swift Kräfte sehe mir Y Art in Erklärung Class1 zu codieren, aber ich brauche Y Variable als X auch zu sein.Nested Generika in Swift

Lange Version

Ich habe eine generische Klasse DataSource<T:GenericItem>-Klasse, die als durch nicht generische Implementierungen subclassed ist (wie ItemsDataSource:DataSource<Item>).

Jetzt möchte ich einen generischen Controller erstellen, der mit Unterklassen meines generischen DataSource arbeiten kann.

Ich erkläre So Controller wie diese TableViewController<DS:GenericDataSource<GenericItem>>, aber in diesem Fall bin ich nicht in der Lage es mit DataSource Parameter zu Unterklasse, die eine Unterklasse von GenericItem als seinen eigenen Parameter (dh ich kann nicht erklären SuperTableViewController<ItemsDataSource>, weil ItemsDataSource ist hat Item generischen Parameter und nicht seine Eltern GenericItem).

Jede Idee, wie kann ich solche generischen Controller erstellen?

+0

Wenn ich Ihre Frage zu verstehen, müssen Sie das Protokoll auch mit einem generischen Typ außer Kraft setzen. –

+0

Können Sie das etwas mehr erklären? Ich habe keine Protokolle, nur eine generische Klasse, die ich in andere generische Klassen einbetten muss? –

+0

Ich denke, das Problem ist, Sie sagen, DS ist generisch, aber TableViewDataSource ist hart getippt. –

Antwort

-1

Vielleicht so etwas wie dies funktioniert:

class Class2<Y> { } 

class Class1<X, Y where X: Class2<Y>> { } 
+0

Swift-Fehler: Oberklassenbedingung 'GenericDataSource ' kann nicht von einem Typparameter abhängen –