函数类型

来源:互联网 发布:mahout推荐算法 编辑:程序博客网 时间:2024/06/07 03:27

函数类型

每一个函数都有特定的函数类型,可以充当参数类型和函数的返回类型。例如:
  1. func addTwoInts(a: Int, b: Int) -> Int {
  2. return a + b
  3. }
  4. func multiplyTwoInts(a: Int, b: Int) -> Int {
  5. return a * b
  6. }
这个例子中定义了两个简单的数学函数addTwoInts和multiplyTwoInts。每个函数接受两个int值,并返回一个int值,执行适当的数学运算并返回结果。

这两个函数的类型是(Int, Int)->Int。可以解读为:"这个函数类型,它有两个int型的参数,并返回一个int类型的值。"

下面是另一个例子,不带任何参数或返回值的函数:
  1. func printHelloWorld() {
  2. println("hello, world")
  3. }
这个函数的类型是()->(),或者"函数没有参数,并返回void。"函数不显式的指出一个返回值类型是void,在swift中相当于一个空元组,显示为()。

使用函数类型

在swift中您可以像任何其他类型一样的使用函数类型。例如,你可以定义一个常量或变量为一个函数类型,并指定适当的函数给该变量:
  1. var mathFunction: (Int, Int) -> Int = addTwoInts
可以解读为:"定义一个名为mathFunction变量,该变量的类型为'一个函数,它接受两个int值,并返回一个int值。'设置这个新的变量来引用名为addTwoInts功能。"

该addTwoInts函数具有与mathFunction相同类型的变量,所以这个赋值在能通过swift的类型检查。

现在你可以调用指定的函数名称为mathFunction:
  1. println("Result: \(mathFunction(2, 3))")
  2. // prints "Result: 5"
不同的函数相同的匹配类型可以分配给相同的变量,也同样的适用于非函数性类型:
  1. mathFunction = multiplyTwoInts
  2. println("Result: \(mathFunction(2, 3))")
  3. // prints "Result: 6"
与其他类型一样,你可以把它迅速推断成函数类型当你为常量或变量分配一个函数时:
纯文本复制
  1. let anotherMathFunction = addTwoInts
  2. // anotherMathFunction is inferred to be of type (Int, Int) -> Int


嵌套函数

迄今为止所有你在本章中遇到函数都是全局函数,在全局范围内定义。其实你还可以在其他函数中定义函数,被称为嵌套函数。

嵌套函数默认对外界是隐藏的,但仍然可以调用和使用其内部的函数。内部函数也可以返回一个嵌套函数,允许在嵌套函数内的另一个范围内使用。

你可以重写上面的chooseStepFunction例子使用并返回嵌套函数:
  1. func chooseStepFunction(backwards: Bool) -> (Int) -> Int {
  2. func stepForward(input: Int) -> Int {
  3. return input + 1
  4. }
  5. func stepBackward(input: Int) -> Int {
  6. return input - 1
  7. }
  8. return backwards ? stepBackward : stepForward
  9. }
  10. var currentValue = -4
  11. let moveNearerToZero = chooseStepFunction(currentValue > 0)
  12. // moveNearerToZero now refers to the nested stepForward() function
  13. while currentValue != 0 {
  14. println("\(currentValue)... ")
  15. currentValue = moveNearerToZero(currentValue)
  16. }
  17. println("zero!")
  18. // -4...
  19. // -3...
  20. // -2...
  21. // -1...
  22. // zero!

0 0
原创粉丝点击