[Swift] インスタンスを比較する

Swiftでインスタンスの内容を比較する場合、比較したいクラスにはisEqualメソッドを実装します。

import Foundation

class TestObject : NSObject {
    var cnt:Int = 0

    override func isEqual(object: AnyObject?) -> Bool {
        if let val = object as? TestObject {
            return (self.cnt==val.cnt)
        }
        else{
            return false
        }
    }
}

この“isEqual”メソッドは“==” でインスタンス同士を比較した場合に呼び出され、インスタンスの内容が同じであればtrueを、異なっていればfalseを返すように実装します。
では、確認してみましょう。

var obj1 = TestObject()
var obj2 = TestObject()
var obj3 = TestObject()
var obj4 = TestObject()

obj1.cnt = 10
obj2.cnt = 10
obj3.cnt = 20

print(“With ‘==’ operator”)

print(obj1==obj2)
// => true ( cntの値が同じであるためtrueになる )

print(obj1==obj3)
// => false ( cntの値が異なるためfalseになる )

print(obj1==obj4)
// => true ( 参照先が同じであるため、当然trueになる )

また、“===” という演算子もありますが、こちらは左右のインスタンスの参照先が同じかどうかを確認するためのもので、内容までは比較しません。

print(“With ‘===’ operator”)

print(obj1===obj2)
// => false ( 参照先が異なるインスタンスであるためfalse )

print(obj1===obj3)
// => false ( 参照先が異なるインスタンスであるためfalse )

print(obj1===obj4)
// => true ( 同じ参照先を示すインスタンスであるためtrue )