根据this page的作者,这是在swift中声明字典词典:
var routeMap : Dictionary<String, Dictionary<String, () -> ()>> = [:]
你能解释一下这是做什么的,特别是最后有这些象形文字() -> ()>> = [:]
的部分吗?
看来这家伙正在加入一系列命令。如果是这种情况,如果你能将这些代码展开成几行,我很感激。
感谢。
答案 0 :(得分:12)
让我们从结束的方向开始吧。
[:]
这只是初始化一个空字典。它与调用""
初始化空字符串或[]
初始化空数组非常相似。
现在,让我们跳转到类型声明。
Dictionary<String, Dictionary<String, () -> ()>>
这是一个将字符串映射到字典的字典。让我们仔细看看那些内部词典的类型。
Dictionary<String, () -> ()>
这会将字符串映射到closure。关闭几乎只是目标C的一个块。这就是() -> ()
的含义。让我们深入了解。
() -> ()
这是声明闭包的语法。左边的值是参数。右边是返回类型。在这种情况下,我们有一个参数和一个返回类型。
()
这意味着Swift中的void
。事实上,在Swift.h中,我们可以在第3953行看到这一点:
typealias Void = ()
所以最终,我们有一个闭包,它没有给出(void)参数,也没有(void)返回值。
更多关闭闭包的示例可能有助于理解语法。让我们设想一个闭包,它接受一个String并将其转换为int。类型如下:
let stringToInt: (String) -> (Int) = ...
现在,一个有无效输入。让我们有一个随机数生成器:
let randomDouble: () -> (Double) = ...
这不接受任何输入,并返回Double。
最后,让我们无效。
let printHelloWorld: () -> () = ...
你可以看到这不带任何参数并且什么都不返回。它更像是一个方法而不是一个函数,但它仍然可以做一些事情,比如修改属性,或者在这种情况下,打印到控制台。