符合Hashable的SwiftUI

符合Hashable的SwiftUI,swiftui,Swiftui,我们如何使SwiftUI对象,特别是图像,符合哈希协议 我知道它们符合equalable协议,所以主要的问题是如何获取散列值,或者使用Hash(into:)函数 在Swift中,遵守可哈希协议通常与将可哈希添加到一致性列表一样简单。但是,如果您有自定义需求,或者使用的属性不完全符合Hashable,则需要做更多的工作 下面是一个我们可以使用的示例结构: struct iPad: Hashable { var serialNumber: String var capacity: I

我们如何使SwiftUI对象,特别是图像,符合哈希协议

我知道它们符合equalable协议,所以主要的问题是如何获取散列值,或者使用
Hash(into:)
函数

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

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

struct iPad: Hashable {
    var serialNumber: String
    var capacity: Int
}
因为它符合
Hashable
协议,并且它的两个属性也符合
Hashable
协议,所以Swift将自动生成一个
hash(into:)
方法

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

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

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

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

资料来源:


也可能会有所帮助。

我怀疑这在目前是不可能的。你想用它的杂烩做什么?也许还有另一种方法。这解释了一般情况下如何散列,但它如何应用于像图像这样没有公共属性的东西?大多数SwiftUI视图都是这样的。
func hash(into hasher: inout Hasher) {
    hasher.combine(serialNumber)
}