swift 可哈希协议哈希函数是否需要 return 唯一值?

Do swift hashable protocol hash functions need to return unique values?

我正在完成 iOS swift 俄罗斯方块教程*,并已完成并开始工作。 但我对一个特定方面感到困惑 - Hashable 协议。 函数:

class Block: Hashable, Printable {
    [...]    
    var hashValue: Int { return self.column ^ self.row }

行为 0..9,列为 0..20。注释中提到了这个函数 "We return the exclusive-or of our row and column properties to generate a unique integer for each Block."。但我的理解是 0^1 将与 1^0 相同,等等......我想知道如果 Hash 函数不是这样唯一的,或者碰撞通常是可以的,这是否是一个问题?正如我所说,该应用程序似乎运行良好...

*https://www.bloc.io/tutorials/swiftris-build-your-first-ios-game-with-swift#!/chapters/681

碰撞是不是"generally OK"。潜在的假设是 x 的哈希值是 y 的哈希值当且仅当 x == y 时。如果您认为第 2 列第 1 行与第 1 列第 2 行相同,那么很好。但我不认为你这样做!该应用程序可能看起来可以工作,但大概您还没有做任何需要散列性的事情。

该应用程序正在运行,因为它还实现了 Equatable 协议:

func ==(lhs: Block, rhs: Block) -> Bool {
    return lhs.column == rhs.column && lhs.row == rhs.row && lhs.color.rawValue == rhs.color.rawValue
}