2016-12-29 116 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