Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift-类型'';不符合协议';可散列';_Swift - Fatal编程技术网

Swift-类型'';不符合协议';可散列';

Swift-类型'';不符合协议';可散列';,swift,Swift,所以我有一个结构: struct ListAction:Hashable{ 让标签:字符串 let action:(()->Void)?=nil let命令:命令?=nil } 但是我在声明类型'ListAction'不符合协议'Hashable'的行中得到了一个错误 如果我删除了定义action常量的行,我可以消除错误,但我不想永久删除该行 我使用的是Swift 5.1。通过覆盖散列(into:)并调用合并所有相关属性,为可散列提供您自己的实现 struct ListAction: Hash

所以我有一个结构:

struct ListAction:Hashable{
让标签:字符串
let action:(()->Void)?=nil
let命令:命令?=nil
}
但是我在声明
类型'ListAction'不符合协议'Hashable'
的行中得到了一个错误

如果我删除了定义
action
常量的行,我可以消除错误,但我不想永久删除该行


我使用的是Swift 5.1。

通过覆盖
散列(into:)
并调用
合并
所有相关属性,为
可散列
提供您自己的实现

struct ListAction: Hashable {
    static func == (lhs: ListAction, rhs: ListAction) -> Bool {
        return lhs.label == rhs.label && lhs.command == rhs.command
    }

    func hash(into hasher: inout Hasher) {
        hasher.combine(label)
        hasher.combine(command)
    }

    let label: String
    let action: (() -> Void)? = nil
    let command: Command? = nil
}

这可能是因为您的操作不是Hashable类型。有关更多信息,请参阅此链接@比克拉姆是的,看起来这就是问题所在。我该如何使其可散列呢?你可以检查一下:@LukeChambers在上面的链接中有一个例子