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