gpt4 book ai didi

swift - 这个快速声明在做什么?

转载 作者:可可西里 更新时间:2023-10-31 23:56:09 25 4
gpt4 key购买 nike

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

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

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

看来这家伙正在将一系列命令连接在一起。如果是这种情况,如果您能将该代码展开成几行,我将不胜感激。

谢谢。

最佳答案

让我们从路的尽头开始。

[:]

这只是初始化一个空的字典。它非常类似于调用"" 来初始化一个空字符串,或调用[] 来初始化一个空数组。

现在,让我们跳到类型声明。

Dictionary<String, Dictionary<String, () -> ()>>

这是一个将字符串映射到字典的字典。让我们仔细看看这些内部字典的类型。

Dictionary<String, () -> ()>

这将一个字符串映射到一个 closure .闭包几乎只是 Objective C 的一个 block 。这就是 () -> () 的意思。让我们深入探讨。

() -> ()

这是声明闭包的语法。左边的值是参数。右边是返回类型。在这种情况下,我们有一个参数和一种返回类型。

()

在 Swift 中这意味着 void。事实上,在 Swift.h 中,我们可以在第 3953 行看到:

typealias Void = ()

所以最终,我们有一个不提供 (void) 参数且没有 (void) 返回值的闭包。

更多闭包示例可能有助于理解语法。让我们想象一个接受 String 并将其转换为 int 的闭包。类型看起来像这样:

let stringToInt: (String) -> (Int) = ...

现在,一个带有空输入的。让我们有一个随机数生成器:

let randomDouble: () -> (Double) = ...

这不需要任何输入,并返回一个 Double。

最后,让我们来个 void to void。

let printHelloWorld: () -> () = ...

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

关于swift - 这个快速声明在做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24377439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com