Swift: Сравните универсальные типы в универсальном классе

Я создаю класс Matrix в swift, который я хочу, чтобы он был Generic, чтобы я мог использовать его следующим образом:

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

Я создал свой класс так:

class Matrix<Template>: NSObject {}

Я пишу функцию, которая применяет гравитацию к матрице, которая принимает emptyKey типа Template и перетаскивает каждый элемент, не равный 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 который также типа Template, он не может скомпилировать и дал мне ошибку:

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

я использую xcode 7.3.1 с Swift 2.2

1 ответ

Решение

Вам нужно ограничить Template до Equatable.

class Matrix<Template:Equatable> ...

(Также я бы посоветовал вам избегать дополнительных. Я не знаю, где вы их используете, но ваше сообщение об ошибке говорит о том, что вы есть, и они будут мешать вам.)

Другие вопросы по тегам