我们如何让 SwiftUI 对象,尤其是 Image 符合 Hashable 协议?
我知道它们符合 Equatable 协议,所以主要问题是如何获取 Hash 值或使用该hash(into:)
函数?
\n\n\n在 Swift 中,遵守
\nHashable
协议通常就像添加Hashable
到一致性列表一样简单。但是,如果您有自定义要求,或者使用不\xe2\x80\x99t全部符合的属性Hashable
,则需要更多的工作。
这里\xe2\x80\x99是我们可以使用的示例结构:
\n\nstruct iPad: Hashable {\n var serialNumber: String\n var capacity: Int\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n\n\n\n因为它符合
\n\nHashable
协议,并且它的两个属性也符合Hashable
协议,所以 Swift 会hash(into:)
自动生成一个方法。然而,在这种情况下,我们可以看到这
\nserialNumber
足以唯一地识别每台 iPad,因此不需要散列容量\xe2\x80\x99。因此,我们可以编写自己的哈希实现,hash(into:)
仅对这一属性进行哈希处理:
func hash(into hasher: inout Hasher) {\n hasher.combine(serialNumber)\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n\n\n\n您可以通过重复调用向哈希添加更多属性
\ncombine()
,并且添加属性的顺序会影响最终的哈希值。
Swift 每次对对象进行哈希处理时都会使用随机种子,这意味着任何对象的哈希值都可以有效地保证在应用程序运行之间不同。
\n\n这反过来意味着每次运行应用程序时,添加到集合或字典中的元素很可能具有不同的顺序。
\n\n来源:https ://www.hackingwithswift.com/example-code/language/how-to-conform-to-the-hashable-protocol
\n\n这也可能有帮助。
\n 归档时间: |
|
查看次数: |
3526 次 |
最近记录: |