Xcode抱怨它"无法将Node类型的值分配给Node< _>?"在第23,24,26,27行(排队的条件部分中的'节点' top'' bottom'的分配)。我不确定这意味着什么,以及为什么Xcode看到节点类型和顶部/底部的差异
class Node<T> {
var key: T?
weak var next: Node<T>?
weak var previous: Node<T>?
init(key: T, previous: Node? = nil) {
self.key = key
self.previous = previous
}
}
class Dequeue<T> {
private var count: Int = 0
private weak var top: Node<T>?
private weak var bottom: Node<T>?
func enqueue<T>(val: T) {
// if dequeue is empty
let node = Node<T>(key: val)
if top == nil {
self.top = node
self.bottom = node
} else {
self.bottom?.next = node
self.bottom = node
}
}
}
答案 0 :(得分:10)
从方法声明中删除通用<T>
。
class Dequeue<T> {
...
func enqueue(val: T) {
...
}
}
类声明中的<T>
适用于整个类,包括方法体。方法体上的显式<T>
引入了一个 new 泛型类型T
,它隐藏了类的T
类型;由于它独立于全局T
,因此编译器无法确保它们兼容。