Hashable プロトコルを実装するとき。次のように、同等のプロトコル関数をクラス外で定義する必要があります。以下の通り。
func ==(lhs: Swap, rhs: Swap) -> Bool {
return (lhs.cookieA == rhs.cookieA && lhs.cookieB == rhs.cookieB) ||
(lhs.cookieB == rhs.cookieA && lhs.cookieA == rhs.cookieB)
}
class Swap: Printable,Hashable {
var cookieA: Cookie
var cookieB: Cookie
init(cookieA: Cookie, cookieB: Cookie) {
self.cookieA = cookieA
self.cookieB = cookieB
}
var hashValue: Int {
return cookieA.hashValue ^ cookieB.hashValue
}
var description: String {
return "swap \(cookieA) with \(cookieB)"
}
}
私にとってはちょっと奇妙です。上記の例では、 func == はクラス Swap に属している必要があります。では、なぜ func == をクラス外で宣言する必要があるのでしょうか??