Я пытаюсь реализовать связанный список на игровых площадках Swift, используя общие типы.Моя функция удаления дает мне ошибки при сравнении с универсальными типами, даже если они эквивалентны.
Я уже пытался соответствовать протоколам Equatable и Comparable в моем объявлении функции, но ошибки все еще сохраняются.
class Node<T> {
var value:T
var next:Node?
init(value:T) {
self.value = value
self.next = nil
}
}
func remove<T: Equatable>(value:T) -> Node<T>? {
if isEmpty {
return nil
}
else {
var current = head!
var prev:Node<T>? = nil
while (current.value != value && current.next != nil) {
prev = current
current = current.next!
}
if (current.value == value) {
//Found node. Remove by updating links, return node
if let prev = prev {
prev.next = current.next
current.next = nil
}
else {
self.head = current.next
current.next = nil
}
size -= 1
return current
}
else {
return nil
}
}
}
В этой строке моей функции удаления:
while (current.value != value && current.next != nil) {
Я получаю сообщение об ошибке:
Binary operator '!=' cannot be applied to operands of type 'T' and 'T'
Также, когда я соответствую Equatable, я получаю эту ошибку в следующей строке при попытке обновить предыдущий узел:
Cannot assign value of type 'Node<T>' to type 'Node<T>?'
Эта ошибка исчезнет при удалении протокола Equatable.
Есть идеи?Похоже, мне не хватает простого шага при соответствии протоколам, но я не уверен, что не хватает ... Заранее спасибо!