函数和闭包中的括号

时间:2016-03-07 00:57:53

标签: swift

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

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

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

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

func myFunction() -> Void-> Int

1 个答案:

答案 0 :(得分:1)

首先...... ()Void是一样的,你有两种不同的写作方式。

第二...... ->是正确的关联。因此,在示例中使用parens是没有意义的,就像使用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没有参数并返回一个闭包。它返回的闭包将一个闭包作为参数并返回一个String。第二个闭包不带参数并返回Int。

希望在散文中写下它并没有让它更加混乱。