函数类型

函数类型

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

这两个函数的类型是(Int,Int)->Int。可以解读为:"这个函数类型,它有两个int型的参数,并返回一个int类型的值。"
下面是另一个例子,不带任何参数或返回值的函数
func printHelloWorld() {
  • println("hello,world")
  • 这个函数的类型是()->(),或者"函数没有参数,并返回void。"函数不显式的指出一个返回值类型是void,在swift中相当于一个元组显示为()。

    使用函数类型

    在swift中您可以像任何其他类型一样的使用函数类型。例如,你可以定义一个常量或变量为一个函数类型,并指定适当的函数给该变量:
    var mathFunction: (Int,Int) -> Int = addTwoInts
  • 可以解读为:"定义一个名为mathFunction变量,该变量的类型为'一个函数,它接受两个int值,并返回一个int值。'设置这个新的变量来引用名为addTwoInts功能。"
    该addTwoInts函数具有与mathFunction相同类型的变量,所以这个赋值在能通过swift的类型检查。
    现在你可以调用指定的函数名称为mathFunction:
    println("Result: \(mathFunction(2,3))")
  • // prints "Result: 5"
  • 不同的函数相同的匹配类型可以分配给相同的变量,也同样的适用于非函数性类型:
    mathFunction = multiplyTwoInts
  • // 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. return backwards ? stepBackward : stepForward
    8. }
    9. var currentValue = -4
    10. let moveNearerToZero = chooseStepFunction(currentValue > 0)
    11. // moveNearerToZero Now refers to the nested stepForward() function
    12. while currentValue != 0 {
    13. println("\(currentValue)... ")
    14. currentValue = moveNearerToZero(currentValue)
    15. println("zero!")
    16. // -4...
    17. // -3...
    18. // -2...
    19. // -1...
    20. // zero!

    相关文章

    软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
    现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
    前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
    【Android App】实战项目之仿抖音的短视频分享App(附源码和...
    前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
    因为我既对接过session、cookie,也对接过JWT,今年因为工作...