我们如何使SwiftUI对象,特别是图像,符合可接受的协议?
我知道它们符合平等协议,所以主要的问题是如何获得哈希值,还是使用hash(into:)函数?
发布于 2019-12-18 00:27:53
Swift中的
,遵循
Hashable协议,通常就像将Hashable添加到一致性列表一样简单。但是,如果您有自定义需求,或者使用不完全符合Hashable的属性,则需要做更多的工作。
下面是一个我们可以使用的示例结构:
struct iPad: Hashable {
var serialNumber: String
var capacity: Int
},因为这符合
Hashable协议,而且它的两个属性也符合Hashable协议,Swift将自动生成hash(into:)方法。
但是,在这种情况下,我们可以看到,serialNumber足以唯一地标识每个iPad,因此不需要散列能力。因此,我们可以编写我们自己的hash(into:)实现,该实现仅对一个属性进行散列:
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也可能有帮助。
https://stackoverflow.com/questions/59383220
复制相似问题