Swift教程之函数详解

2020-01-08 22:46:49于丽

该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以调用者类型安全的方式转换了函数的功能。

函数类型的返回值