hasher.combine(self) 在使用集合时会造成麻烦吗?

will hasher.combine(self) cause trouble while using collections?

使用 hash(into:) 的这种实现会导致问题,尤其是使用集合和数组吗?:

func hash(into hasher: inout Hasher){
    hasher.combine(self)
}

我非常确定 hasher.combine(self) 不会编译或导致无限循环。

hasher.combine()看到给定的类型时,它将寻找那个对象hash(into:)函数,该函数将调用具有相同类型的hasher.combine(),依此类推等等。

你应该做的是

func hash(into hasher: inout Hasher) {
    hasher.combine(property1)
    hasher.combine(prop2)
    //...
    //...
    //...
    //...
    //...
    //...
    //until you have written a line to combine every property you want to hash
}

如果您有任何问题,请告诉我。

您的 Hasher 实现导致错误:

Thread 1: EXC_BAD_ACCESS (code=2, address=0x7ffeeec79fe8)

这是使类型符合 Hashable 协议的默认方式

/// A point in an x-y coordinate system.
struct GridPoint {
    var x: Int
    var y: Int
}

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

    func hash(into hasher: inout Hasher) {
        hasher.combine(x)
        hasher.combine(y)
    }
}