这快速宣言的作用是什么?

时间:2014-06-24 02:27:17

标签: swift

根据this page的作者,这是在swift中声明字典词典:

var routeMap : Dictionary<String, Dictionary<String, () -> ()>> = [:]

你能解释一下这是做什么的,特别是最后有这些象形文字() -> ()>> = [:]的部分吗?

看来这家伙正在加入一系列命令。如果是这种情况,如果你能将这些代码展开成几行,我很感激。

感谢。

1 个答案:

答案 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: () -> () = ...

你可以看到这不带任何参数并且什么都不返回。它更像是一个方法而不是一个函数,但它仍然可以做一些事情,比如修改属性,或者在这种情况下,打印到控制台。