首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SwiftUI符合Hashable

SwiftUI符合Hashable
EN

Stack Overflow用户
提问于 2019-12-17 22:49:25
回答 1查看 5.2K关注 0票数 7

我们如何使SwiftUI对象,特别是图像,符合可接受的协议?

我知道它们符合平等协议,所以主要的问题是如何获得哈希值,还是使用hash(into:)函数?

EN

回答 1

Stack Overflow用户

发布于 2019-12-18 00:27:53

Swift中的

,遵循Hashable协议,通常就像将Hashable添加到一致性列表一样简单。但是,如果您有自定义需求,或者使用不完全符合Hashable的属性,则需要做更多的工作。

下面是一个我们可以使用的示例结构:

代码语言:javascript
复制
struct iPad: Hashable {
    var serialNumber: String
    var capacity: Int
}

,因为这符合Hashable协议,而且它的两个属性也符合Hashable协议,Swift将自动生成hash(into:)方法。

但是,在这种情况下,我们可以看到,serialNumber足以唯一地标识每个iPad,因此不需要散列能力。因此,我们可以编写我们自己的hash(into:)实现,该实现仅对一个属性进行散列:

代码语言:javascript
复制
func hash(into hasher: inout Hasher) {
    hasher.combine(serialNumber)
}

您可以通过反复调用combine()向哈希添加更多属性,添加属性的顺序会影响最终的哈希值。

Swift每次对对象进行散列时都使用随机种子,这意味着任何对象的哈希值在应用程序运行期间都是不同的。

这反过来意味着,每次运行应用程序时,添加到集合或字典中的元素很可能有不同的顺序。

来源:https://www.hackingwithswift.com/example-code/language/how-to-conform-to-the-hashable-protocol

This也可能有帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59383220

复制
相关文章

相似问题

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