swift - 函数和闭包中的括号

标签 swift

我对在 Swift 中声明参数和返回类型有点困惑。

这些参数和返回类型的含义相同吗?这些括号 () 有什么用?

func myFunction() -> (()-> Int)

func myFunction() -> (Void-> Int)

func myFunction() -> Void-> Int

最佳答案

首先... ()Void 是同一件事,你有两种不同的方式来编写同一件事。

第二... -> 是右结合的。因此,在示例中使用括号是没有意义的,就像使用 a + (b * c) 等表达式一样。该表达式与 a + b * c 相同。

基本上,您问题中的三个示例都定义了一个不带参数的函数,并返回一个不带参数并返回 Int 的闭包。

更多一些有帮助的例子:

func myFuncA() -> () -> Int -> String {
    return { () -> Int -> String in return { (i: Int) -> String in String(i) } }
}

func myFuncB() -> () -> (Int -> String) {
    return { () -> Int -> String in return { (i: Int) -> String in String(i) } }
}

func myFuncC() -> (() -> Int) -> String {
    return { (f: () -> Int) in String(f()) }
}

在上面,myFuncA 与 myFuncB 相同,但它们都与 myFuncC 不同。

myFuncA(和 B)不带参数,并返回一个闭包。它返回的闭包不带参数并返回另一个闭包。第二个闭包采用 Int 并返回 String。

myFuncC 不带任何参数并返回一个闭包。它返回的闭包将闭包作为参数并返回一个字符串。第二个闭包不带任何参数并返回一个 Int。

希望用散文编写它不会让它变得更加困惑。

关于swift - 函数和闭包中的括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35834586/

相关文章:

ios - 在 ios-charts 中如何设置 y 轴的最大值?

ios - swift 将个人的名字从 firebase 读入 UILabel

swift - 跨 ViewController 跟踪触摸

ios - 如何在swift中计算两个画线图像的相似度

swift - 显示用户位置

ios - 从字符串数组中获取 NSClassFromString - Swift

Swift 2.0 flatMap 用法

swift - 如何在 Swift 中调用 AWS Lambda 函数

objective-c - 如何在不在自定义创建的框架 Xcode 中添加 GoogleService-Info.plist 文件的情况下使用 Firebase 推送通知服务

ios - Swift 4 - Xcode 9.0 beta 2 上的 OpenCV 3.2