无法将Node <t>类型的值分配给Node&lt; _&gt;?

时间:2015-11-27 04:19:36

标签: swift generics

Xcode抱怨它&#34;无法将Node类型的值分配给Node&lt; _&gt;?&#34;在第23,24,26,27行(排队的条件部分中的&#39;节点&#39; top&#39;&#39; bottom&#39;的分配)。我不确定这意味着什么,以及为什么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
        }
     }

}

1 个答案:

答案 0 :(得分:10)

从方法声明中删除通用<T>

class Dequeue<T> {
    ...

    func enqueue(val: T) {
        ...
     }    
}

类声明中的<T>适用于整个类,包括方法体。方法体上的显式<T>引入了一个 new 泛型类型T,它隐藏了类的T类型;由于它独立于全局T,因此编译器无法确保它们兼容。