2016-04-06 7 views
2

Pour faire simple, j'ai une classe générique Class1<X:Class2<Y>>, et aussi loin que je vois les forces Swift me hardcode le type Y dans la déclaration de Class1, mais je dois Y être variable ainsi que X.Nested générique dans Swift

Version longue

J'ai une classe classe DataSource<T:GenericItem> générique, qui est que les implémentations non par sous-classé génériques (comme ItemsDataSource:DataSource<Item>).

Maintenant, je veux créer un contrôleur générique qui peut fonctionner avec les sous-classes de mon générique DataSource.

Je suis déclarant contrôleur comme ça TableViewController<DS:GenericDataSource<GenericItem>>, mais dans ce cas, je ne suis pas en mesure de sous-classe avec paramètre DataSource qui est une sous-classe de GenericItem comme son propre paramètre (ie je ne peux pas déclarer SuperTableViewController<ItemsDataSource>, parce que ItemsDataSource a Item paramètre générique et pas son parent GenericItem).

Une idée comment puis-je créer un tel contrôleur générique?

+0

Si je comprends bien votre question, vous devez remplacer le protocole aussi avec un type générique. –

+0

Pouvez-vous expliquer un peu plus? Je n'ai aucun protocole, juste une classe générique que j'ai besoin d'imbriquer dans d'autres génériques? –

+0

Je pense que le problème est que vous dites que DS est générique mais TableViewDataSource est tapé en dur. –

Répondre

-1

Peut-être quelque chose comme ceci fonctionne:

class Class2<Y> { } 

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

Erreur rapide: la contrainte de super-classe 'GenericDataSource ' ne peut pas dépendre d'un paramètre de type –