37

我正在尝试创建此类字典,[petInfo : UIImage]()但出现错误Type 'petInfo' does not conform to protocol 'Hashable'。我的 petInfo 结构是这样的:

struct petInfo {
    var petName: String
    var dbName: String
}

所以我想以某种方式使其可散列,但它的所有组件都不是var hashValue: Int所需的整数。如果它的字段都不是整数,我怎样才能使它符合协议?dbName如果我知道这个结构的所有出现都是唯一的,我可以使用它吗?

4

2 回答 2

59

只需dbName.hashValue从您的hashValue函数返回。仅供参考 - 哈希值不需要是唯一的。要求是相等的两个对象也必须具有相同的哈希值。

struct PetInfo: Hashable {
    var petName: String
    var dbName: String

    var hashValue: Int {
        return dbName.hashValue
    }

    static func == (lhs: PetInfo, rhs: PetInfo) -> Bool {
        return lhs.dbName == rhs.dbName && lhs.petName == rhs.petName
    }
}
于 2017-02-01T05:16:21.107 回答
27

从 Swift 5var hashValue:Int开始,已弃用func hash(into hasher: inout Hasher)(在 Swift 4.2 中引入),因此要更新@rmaddy 给出的答案:

func hash(into hasher: inout Hasher) {
    hasher.combine(dbName)
}
于 2019-05-31T20:36:46.130 回答