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