2016-12-29 163 views
2

我通過特定int值鏈表搜索,但我收到錯誤「二進制運算符=不能適用於兩個‘詮釋’操作數比較兩個整數

我的代碼:

//node.data is an Int 
//someInt is an Int 

if node.data != someInt {...} 

我假設,因爲Int符合Equatable我可以比較Int值是否有更好的方法來做到這一點

全碼:?

class Node<Int> { 
    var data: Int 
    var next: Node? = nil 

    init(data: Int) { 
     self.data = data 
    } 
} 

class LinkedList<Int> { 
    var head: Node<Int>? 
    func find(someInt: Int) { 
     var partitioningNode = head 

     //find node 
     guard var node = head else { 
      print("empy linked list") 
      return 
     } 
     if node.data != someInt { 
      partitioningNode = node 
      ... 
     } 
    } 
} 
+1

奇怪的是...應該是完全好的 – Alexander

+4

一如往常,[mcve]將是最有幫助的。 – Hamish

+1

確保他們確實是Ints。他們可能是可選項,然後他們需要!要麼 ?運營商。 –

回答

1

在絕大多數情況下,如「Binary operator ...」不能應用於兩個「X」操作數,「當它絕對可以應用於這些類型時,只是診斷中的一個錯誤消息生成器。該地區可能存在其他類型的錯誤。沒有任何上下文(我們需要上下文),我會確保你記得從編碼函數返回一些東西。有時這意味着「我想找到一個!=,在這種情況下,我會找回Float而不是Bool,我找不到那個,所以我反而抱怨Int。」

但是沒有MCVE,就沒有辦法進一步調試它。你在附近某處發生類型錯誤。

+0

感謝羅布,類型錯誤是我的問題。 – MyBikeIsAwesome

0

我發現了這個問題......最初我的LinkedList和LinkedListNode類定義了一個通用的<T>。雖然重構,我注意到通用不再需要,節點中的數據只需要一個Int,所以我錯誤地將<T>替換爲<Int>,因此在嘗試比較兩個「Ints」時導致錯誤

+1

您仍然可以使用實現Equatable協議的泛型類型: class Node {0128: =零 的init(數據:T){ self.data =數據 } } LinkedList類 { 變種頭:節點? func find(value:T) - >節點? { VAR partitioningNode =頭 而partitioningNode!= {零如果 讓節點= partitioningNode,node.data == {價值回報 節點 } partitioningNode = partitioningNode?下一個 } return nil } } – bubuxu