2016-07-30 8 views
1

有用な結果を得ずにインターネットで検索しました。私の質問はとても簡単です。 2つのListNodeを比較する方法は等しいかどうか?例:2項演算子 '!='を2つのListNodeスウィフトに適用することはできません

// plused is a ListNode 
if plused != head?.next { // Binary operator '!=' cannot be applied to two ListNode 
    head?.val += 1 
} 

誰でもSwiftでこれを行う方法を教えてもらえますか?


編集、2016年7月31日:

これら二つのノードがクラスのインスタンスとして宣言されている

+0

ID演算子 '!=='を試してください – 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のドキュメントから '=== 'は、**同じクラス**から2つのインスタンスが継承されていることを知りました。ここでは、2つのノードが同じクラスから継承しますが、同じノードではない可能性があります。私は正しいですか? –

+0

@ JW.ZG:アイデンティティ演算子 '==='は、その2つのオペランドが同じオブジェクトの_同じインスタンスであるかどうか、つまり同じ参照を指す2つの変数かどうかをチェックします。これはあなたが望むものかもしれませんし、リンクされたリストの実装の詳細によって異なります。 '=='は同値かどうか(オペランドが意味的に同等かどうか)をチェックし、それぞれの型によって自己定義されます。 – Arclite

+0

@ JW.ZG:** '===' **は、クラス型の2つの定数または変数がまったく同じクラスインスタンスを参照することを意味します。 [link](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ClassesAndStructures.html#//apple_ref/doc/uid/TP40014097-CH13-ID82)から参照してください。 あなたの場合、「plused」&「head?.next」の種類は何ですか?それはクラスまたはStructとして宣言されているのですか? – Tesan3089

1

!=は、Equatableプロトコルによって提供されるオペレータです。 ListNodeタイプ(構造体、クラスなど)がそのプロトコルに準拠していない場合(==関数を実装することによって)、!=を使用することはできません。

関連する問題