该mathFunction函数具有与addTwoInts函数相同类型的变量,所以这个赋值能通过Swift的类型检查。
现在你可以调用指定的函数名称为mathFunction:
复制代码
println("Result: (mathFunction(2, 3))")
// prints "Result: 5"
不同的函数相同的匹配类型可以分配给相同的变量,也同样的适用于非函数性类型:
复制代码
mathFunction = multiplyTwoInts
println("Result: (mathFunction(2, 3))")
// prints "Result: 6"
与其他类型一样,你可以把它迅速定义成函数类型当你为常量或变量分配一个函数时:
复制代码
let anotherMathFunction = addTwoInts
// anotherMathFunction is inferred to be of type (Int, Int) -> Int
函数类型的参数
可以使用一个函数类型,如(Int, Int)->Int作为另一个函数的参数类型。这使你预留了一个函数的某些方面的实现,让调用者调用函数时提供。
下面就以打印上面的数学函数的结果为例:
复制代码
func printMathResult(mathFunction: (Int, Int) -> Int, a: Int, b: Int) {
println("Result: (mathFunction(a, b))")
}
printMathResult(addTwoInts, 3, 5)
// prints "Result: 8"
这个例子中定义了一个名为printMathResult函数,它有三个参数。第一个参数名为mathFunction,类型为(Int, Int)->Int。您可以传入符合条件的任何函数类型作为此函数的第一个参数。第二和第三个参数a、b都是int类型。被用作于提供数学函数的两个输入值。
当printMathResult被调用时,它传递addTwoInt函数,以及整数值3和5。它使用3和5,调用addTwoInt函数,并打印函数运行的结果8。
printMathResult的作用是调用一个适当类型的数学函数并打印相应结果。那是什么功能的实现其实并不重要,你只要给以正确的类型匹配就行。这使printMathResult以调用者类型安全的方式转换了函数的功能。
函数类型的返回值








