我正在浏览Apple对Swift的介绍并遇到了这样的例子:
func makeIncrementer() -> ((Int) -> Int) {
func addOne(number: Int) -> Int {
return 1 + number
}
return addOne
}
var increment = makeIncrementer()
increment(7)
您能解释一下makeIncrementer函数的返回类型的语法吗?我知道这个函数返回另一个函数,但在这个上下文中((Int) -> Int)
的作用对我来说仍然不清楚。
答案 0 :(得分:7)
它表示该函数返回函数,并且返回的函数将Int
作为输入参数并返回Int
。
在Swift中定义函数内的函数是完全合法的。
答案 1 :(得分:2)
(Int -> Int)
表示以Int
为参数并返回Int
的闭包(或函数)。
声明闭包类型的语法是:
(parameters) -> (return_types)
parameters
是闭包作为输入接收的参数列表,return_types
是闭包返回的值列表。两者都是元组,但是在一个参数或一个返回类型的情况下,可以省略标识元组的括号。因此,例如,期望一个参数并返回一个值的clousure可以定义为:
parameter -> return_type
在你的情况下:
Int -> Int
是一个闭包,有1个输入参数Int
类型并返回Int
返回类型括在括号中,以明确返回类型,但您也可以将其写为:
func makeIncrementer() -> Int -> Int {
在我看来,这比
更不可读func makeIncrementer() -> (Int -> Int) {
答案 2 :(得分:1)
我对swift的语法并不完全熟悉,但我猜所有高阶函数都是一样的。 makeIncrementer
是一个函数:
Int
参数Int
视觉说明(a -> b
表示将a
类型作为参数并返回类型b
)的函数:
makeIncrementer -> (Int -> Int) ^ | | a function that takes an Int and returns an Int, i.e. (addOne in your case)