我对在Swift中声明参数和返回类型感到困惑。
这些参数和返回类型是否具有相同的含义?这些括号()有什么用?
func myFunction() -> (()-> Int)
func myFunction() -> (Void-> Int)
func myFunction() -> Void-> Int
答案 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。
希望在散文中写下它并没有让它更加混乱。