二进制运算符'!='不能应用于两个ListNode swift
我在因特网上搜索到了没有任何有用的结果。我的问题很简单。如何比较两个ListNode是否相等?例如:二进制运算符'!='不能应用于两个ListNode swift
// plused is a ListNode
if plused != head?.next { // Binary operator '!=' cannot be applied to two ListNode
head?.val += 1
}
有谁能告诉我如何在Swift中做到这一点?
编辑年,2016年7月31日:
这两个节点被声明为类的实例
我猜你应该使用的身份运营商比较实例。
平等:===
不等于!==
示例代码:
if instance1 === instance { print("Equal") }
if instance1 !== instance { print("Not Equal") }
更新实例:解决方案迅速
class ListNode {
init() { print("Initializing node") }
}
class Head {
var next: ListNode
init(withNode node: ListNode) { next = node }
}
let plused = ListNode()
let head = Head(withNode: plused)
//(plused != head.next) ? print("Equal") : print("Not Equal")
(object_getClass(plused) == object_getClass(head.next)) ? print("Equal") : print("Not Equal")
让我知道这个解决方案是否解决您的查询。
我从Swift doc中学习到'==='意味着两个实例是从同一个类**继承而来的**。那么,这里有两个节点从同一个类继承,但它们可能不是同一个节点。我对么? –
@ JW.ZG:身份运算符'==='检查它的两个操作数是否是一个对象的_exact相同实例,即它是否是两个指向同一个引用的变量。这可能是也可能不是你想要的,这取决于你的链表的实现细节。 '=='检查是否相等(操作数是否在语义上相同),并且由每个类型自定义。 – Arclite
@ JW.ZG:**'==='**表示类型的两个常量或变量引用完全相同的类实例。请参阅[链接](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ClassesAndStructures.html#//apple_ref/doc/uid/TP40014097-CH13-ID82)。 但在你的情况下,'plused'和'head?.next'的类型是什么。我的意思是它被声明为类或结构? – Tesan3089
!=
是由Equatable
协议提供的运营商。如果您的ListNode
类型(结构,类别等)不符合该协议(通过执行==
函数),那么您将无法使用!=
来对付它们。
尝试使用身份运算符'!==' – Sweeper