2016-07-30 26 views
1

我在因特网上搜索到了没有任何有用的结果。我的问题很简单。如何比较两个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日:

这两个节点被声明为类的实例

+0

尝试使用身份运算符'!==' – Sweeper

回答

0

我猜你应该使用的身份运营商比较实例。

  • 平等:===

  • 不等于!==

示例代码:

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") 

让我知道这个解决方案是否解决您的查询。

+0

我从Swift doc中学习到'==='意味着两个实例是从同一个类**继承而来的**。那么,这里有两个节点从同一个类继承,但它们可能不是同一个节点。我对么? –

+0

@ JW.ZG:身份运算符'==='检查它的两个操作数是否是一个对象的_exact相同实例,即它是否是两个指向同一个引用的变量。这可能是也可能不是你想要的,这取决于你的链表的实现细节。 '=='检查是否相等(操作数是否在语义上相同),并且由每个类型自定义。 – Arclite

+0

@ 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

1

!=是由Equatable协议提供的运营商。如果您的ListNode类型(结构,类别等)不符合该协议(通过执行==函数),那么您将无法使用!=来对付它们。

相关问题