【发布时间】:2019-01-19 10:57:26
【问题描述】:
我正在尝试使用泛型类型在 Swift 游乐场中实现一个链表。我的 remove 函数在与泛型类型进行比较时给了我错误,即使它们是等价的。
我已经尝试在我的函数声明中遵守 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 协议时,此错误将消失。
有什么想法吗?听起来我在遵守协议时可能遗漏了一个简单的步骤,但我不确定遗漏了什么……提前致谢!
【问题讨论】:
标签: swift