2016-07-18 23 views
1

Ich bin eine Matrix-Klasse in schnellen Erstellung, die ich es generisch sein will, so kann ich es wie folgt verwenden:Swift: Vergleichen Sie generische Typen in der generischen Klasse

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

ich meine Klasse erstellt wie folgt aus:

class Matrix<Template>: NSObject {}

ich Kistenverpackungen eine Funktion, die Schwerkraft zu Matrix Nehmen, die eine emptyKey vom Typ Vorlage nimmt, und zieht jedes Element nicht gleich dem Boden der Matrix emptyKey

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

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

Das Problem ist: wenn ich versuche, die value in Matrix an einer bestimmten Stelle zu vergleichen, die vom Typ Template mit dem emptyKey, die ebenfalls vom Typ Template, es nicht zu kompilieren und mir den Fehler gab:

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

ich verwende xcode 7.3.1 mit Swift 2.2

Antwort

4

Sie müssen Vorlage gleichzusetzen beschränken.

class Matrix<Template:Equatable> ... 

(Auch würde ich empfehlen, dass Sie Optionals vermeiden. Ich weiß nicht, wo man sie verwenden, aber Ihre Fehlermeldung deutet darauf hin, dass Sie sind, und sie werden in die Quere kommen.)

+0

Es könnte Ihnen helfen, mein kostenloses Online-Buch zu lesen: http://www.apeth.com/swiftBook/ch04.html#_type_constraints – matt

+0

Danke, das hat funktioniert, ich werde Ihren Ratschlag nehmen :) –