在Swift中,如何声明键是函数的字典? (不符合协议'Hashable')

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Swift中,如何声明键是函数的字典? (不符合协议'Hashable')相关的知识,希望对你有一定的参考价值。

我试图在Swift中实现这一点:

let dict : [ () -> () : String]
//error: type '() -> ()' does not conform to protocol 'Hashable'
//let dict : [ () -> () : String]
//^

但是得到错误'() - >()'不符合协议'Hashable'。我该如何解决这个错误?

编辑:我正在从Lua移植有限状态机,其中键恰好是一个函数。 (我知道在任何其他语言中可能都很奇怪,但对于Lua来说还可以)。 Lua代码:

local machine = {}

machine [Entry] = {loop = Entry, go = Another, gosub = sub } 
machine [Another] = {go = Entry, loop = Another, next = Next } 
machine [Next] = {startAgain = Entry } 
machine [sub] = {out = Entry, next = Next, gosub = indoor, goOutDoor = outdoor } 
machine [indoor] = {out = sub, next = sub } 
machine [outdoor] = {next = sub } 
答案

我认为你无法修复它。字典的关键必须符合Hashable协议。这意味着它具有Int hashValue属性,并且它实现了==运算符。 (见链接:https://developer.apple.com/documentation/swift/hashable

函数不符合Hashable协议,因此它们不能是字典键。

以上是关于在Swift中,如何声明键是函数的字典? (不符合协议'Hashable')的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 1 (常量变量字符串数组字典元组循环枚举函数)

我如何解释这个看似函数声明但不符合通常模式的声明?

我们如何在 swift 2.3 中将值附加到包含 3 个元素的字典中?

如何使用swift在pubnub中将数据发布为Any类型的字典?

函数返回的字典的键是啥? [复制]

如何制作一个包含特定值的Swift词典?