2015-11-27 41 views
4

Xcode抱怨说:“无法指定类型节点的值来键入节点< _>?”在第23,24,26,27行(在排队的条件部分中'节点'到'顶部'和'底部'的分配)。我不知道这意味着什么,以及为什么Xcode中看到了该类型的节点和顶/差异底部无法将节点类型为<T>的值分配给类型节点<_>?

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 
     } 
    } 

} 

回答

6

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

class Dequeue<T> { 
    ... 

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

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

相关问题