リハビリエンジニア

エンジニアリングのリハビリ中

Swift - 自作クラスをEquatableプロトコルに準拠させる

自作クラスである、以下の様なMemberクラスがあったとします。

class Member {
   let id: String
   let name: String

   init(_ id:String, _ name: String) {
     self.id = id
     self.name = name
   }

}

同一人物かどうかを判断するために、
以下のように「==」や「!=」での比較を行いたいと思いました。

let memberA = Member("01", "Taro")
let memberB = Member("01", "Masami")

if memberA == memberB {
    print("同じ人")
}
else {
    print("違う人")
}

等値演算子に利用するには、
自作のMemberクラスをEqutableプロトコルに準拠させなければなりません。
ということで、以下のように書くと上記の書き方が叶います。
こういうのを「演算子オーバーロード」と言うらしい。

func == (left : Member, right : Member) -> Bool {
   return left.id == right.id
}
extension Member: Equatable {}


class Member {
   let id: String
   let name: String

   init(_ id:String, _ name: String) {
     self.id = id
     self.name = name
   }
}

この例ではイマイチですが、リンク先のように日付先などを比べるにあたって、
コードが見づらくなる時などには良いかもしれませんね。

参考: http://dev.classmethod.jp/smartphone/strideablensdate/