自作したclassを集合を使った処理にかけたいです。
そのために自作の型にHashableプロトコルに準拠させたいのですが、

swiftリファレンスの翻訳版より、

struct GridPoint {
         var x: Int
         var y: Int
     }



extension GridPoint: Hashable {
         var hashValue: Int {
             return x.hashValue ^ y.hashValue
         }

         static func == (lhs: GridPoint, rhs: GridPoint) -> Bool {
             return lhs.x == rhs.x && lhs.y == rhs.y
         }
     }

この部分が理解することが難しいので質問させていただきました。

つまり何を定義しなくてはならないのでしょうか?