Swift:比较泛型类中的泛型类型

时间:2016-07-18 14:09:56

标签: swift generics matrix compiler-errors operands

我在swift中创建了一个Matrix类,我希望它是Generic,所以我可以使用它像这样:

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

我创建了这样的课程:

class Matrix<Template>: NSObject {}

我正在创建一个函数,将Gravity应用于矩阵,该矩阵采用Template类型的emptyKey,并将每个不等于emptyKey的元素拖动到矩阵的底部

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

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

问题是:当我尝试比较value类型的特定位置的矩阵中的Template和类型emptyKey的{​​{1}}时,它无法编译并给我错误:

Template

我将Binary operator '==' cannot be applied to two 'Template?' operands xcode 7.3.1

一起使用

1 个答案:

答案 0 :(得分:4)

您需要将模板限制为Equatable。

class Matrix<Template:Equatable> ...

(另外我建议你避免使用Optionals。我不知道你在哪里使用它们,但你的错误信息暗示你是,并且它们会妨碍你。)