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