Я работаю над созданием гибкой структуры данных в Swift под названием Node, которая сама по себе не привязана к какому-либо типу контента. Однако данные полезной нагрузки в узле объявляются как следующая общая структура элемента, которая соответствует протоколу Equatable:
public struct Element<T>: Equatable {
var data: T;
}
public func ==<T:Equatable>(lhs: Element<T>, rhs: Element<T>) -> Bool {
return lhs.data == rhs.data;
}
Ограничение состоит в том, что элемент должен быть привязан к эквивалентному типу класса. У меня проблема с узлом, содержащим этот элемент. Узел будет использоваться в словаре, массиве или любом другом типе контейнера. Вот что у меня есть:
public class Node: Equatable {
var payload: Element<AnyObject>
init(_data: Element<AnyObject>) {
self.payload = _data
}
}
public func ==(lhs: Node, rhs: Node) -> Bool {
return lhs.payload == rhs.payload;
}
Конечно, я получаю сообщение об ошибке, что AnyObject не соответствует Equatable. Есть ли способ ограничить объявление полезной нагрузки только объектами, которые эквивалентны? На данный момент я не знаю, какие объекты могут храниться в полезной нагрузке.
Также только что понял, что мне нужно поставить проверку класса в функции == в Node, чтобы убедиться, что две полезные нагрузки Node совместимы для сравнения - не нужно, чтобы они были.
Мысли? Спасибо!
==
относится кlhs.data
иrhs.data
, гдеlhs
иrhs
- это узлы. Но ваш класс Node не имеет свойстваdata
, поэтому я не понимаю, что это должно означать. Вы имели в видуlhs.payload
иrhs.payload
? - person matt   schedule 25.02.2016