Swift函数类型(参数类型和返回值类型)
函数类型
函数类型表示一个函数、方法或闭包的类型,它由一个参数类型和返回值类型组成,中间用箭头->
隔开:
-
parameter type
->return type
由于 参数类型 和 返回值类型 可以是元组类型,所以函数类型可以让函数与方法支持多参数与多返回值。
你可以对函数类型应用带有参数类型()
并返回表达式类型的auto_closure
属性(见类型属性章节)。一个自动闭包函数捕获特定表达式上的隐式闭包而非表达式本身。下面的例子使用auto_closure
属性来定义一个很简单的assert函数:
func simpleAssert(condition: @auto_closure () -> Bool, message: String){
if !condition(){
println(message)
}
}
let testNumber = 5
simpleAssert(testNumber % 2 == 0, "testNumber isn't an even number.")
// prints "testNumber isn't an even number."
函数类型可以拥有一个可变长参数作为参数类型中的最后一个参数。从语法角度上讲,可变长参数由一个基础类型名字和...
组成,如Int...
。可变长参数被认为是一个包含了基础类型元素的数组。即Int...
就是Int[]
。关于使用可变长参数的例子,见章节“可变长参数”。
为了指定一个in-out
参数,可以在参数类型前加inout
前缀。但是你不可以对可变长参数或返回值类型使用inout
。关于In-Out参数的讨论见章节In-Out参数部分。
柯里化函数(curried function)的类型相当于一个嵌套函数类型。例如,下面的柯里化函数addTwoNumber()()
的类型是Int -> Int -> Int
:
func addTwoNumbers(a: Int)(b: Int) -> Int{
return a + b
}
addTwoNumbers(4)(5) // returns 9
柯里化函数的函数类型从右向左组成一组。例如,函数类型Int -> Int -> Int
可以被理解为Int -> (Int -> Int)
——也就是说,一个函数传入一个Int
然后输出作为另一个函数的输入,然后又返回一个Int
。例如,你可以使用如下嵌套函数来重写柯里化函数addTwoNumbers()()
:
func addTwoNumbers(a: Int) -> (Int -> Int){
func addTheSecondNumber(b: Int) -> Int{
return a + b
}
return addTheSecondNumber
}
addTwoNumbers(4)(5) // Returns 9