首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使struct Hashable?

使struct Hashable?
EN

Stack Overflow用户
提问于 2017-02-01 13:12:19
回答 2查看 12.9K关注 0票数 35

我正在尝试创建一个排序字典,但是我得到了错误Type 'petInfo' does not conform to protocol 'Hashable'。我的petInfo结构如下:

代码语言:javascript
复制
struct petInfo {
    var petName: String
    var dbName: String
}

所以我想以某种方式使它可哈希,但它的组件都不是整数,这是var hashValue: Int所要求的。如果它的字段都不是整数,我如何使它符合协议?如果我知道dbName对于此结构的所有实例都是唯一的,那么我可以使用它吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-01 13:16:21

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

代码语言:javascript
复制
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
    }
}
票数 58
EN

Stack Overflow用户

发布于 2019-06-01 04:36:46

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

代码语言:javascript
复制
func hash(into hasher: inout Hasher) {
    hasher.combine(dbName)
}
票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41972319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档