2016-07-30 56 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類型(結構,類別等)不符合該協議(通過執行==函數),那麼您將無法使用!=來對付它們。

相關問題