所以我有这样的结构:
struct ListAction: Hashable {
let label: String
let action: (() -> Void)? = nil
let command: Command? = nil
}
但是我在声明Type 'ListAction' does not conform to protocol 'Hashable'
的行上得到了一个错误。
如果我删除定义action
常量的行,我可以消除这个错误,但是我不想永久删除该行。
我用的是Swift 5.1.
2条答案
按热度按时间yb3bgrhw1#
通过重写
hash(into:)
并在所有相关属性上调用combine
,为Hashable
提供您自己的实现。lyr7nygr2#
该结构需要一个唯一标识符才能符合Hashable。您只需向结构添加一个UID,然后添加一个哈希函数作为比较函数来进行比较。
你可以把这两个函数和var uid添加到任何你在创建哈希时遇到问题的结构体中。
向需要协议函数(如hash)的结构体添加扩展是一个很好的实践。