2016-07-18 2 views
1

générique je crée une classe Matrix dans rapide, que je veux que ce soit générique, donc je peux l'utiliser comme ceci:Swift: comparer les types génériques en classe

let matrix: Matrix<Character>; // Or any other type

J'ai créé ma classe comme ceci:

class Matrix<Template>: NSObject {}

Je Crating une fonction Appliquer la gravité à la matrice qui prend un emptyKey de type de modèle, et fait glisser tous les éléments non égal à emptyKey au fond de la matrice

// For example emptyKey is "_" and Template is String. 

1 _ 2    1 _ _ 
3 4 5 == To ==> 3 _ 2 
6 _ _    6 4 5 

Le problème est: quand je suis en train de comparer la value dans la matrice à un endroit spécifique de type Template avec le emptyKey qui a également de type Template, il ne parvient pas à compiler et m'a donné l'erreur:

Binary operator '==' cannot be applied to two 'Template?' operands 

J'utilise xcode 7.3.1 avec Swift 2.2

Répondre

4

Vous devez limiter modèle pour assimilables.

class Matrix<Template:Equatable> ... 

(Aussi je vous conseille d'éviter Optional. Je ne sais pas où vous les utilisez, mais votre message d'erreur suggère que vous êtes, et ils vont dans votre chemin.)

+0

Il pourrait vous aider à lire mon livre en ligne gratuit: http://www.apeth.com/swiftBook/ch04.html#_type_constraints – matt

+0

Merci, cela a fonctionné, je vais prendre vos conseils :) –