《Swift 权威指南》——第6章,第6.9节函数类型

    xiaoxiao2024-03-16  134

    本节书摘来自异步社区《Swift 权威指南》一书中的第6章,第6.9节函数类型,作者 李宁,更多章节内容可以访问云栖社区“异步社区”公众号查看

    6.9 函数类型

    Swift语言支持定义函数类型(类似于C语言的函数指针)。一个函数类型需要指定下面3个要素。

    函数参数个数。函数参数类型。函数返回值。函数类型和其他数据类型的使用方法完全相同,在冒号(:)后面指定类型。定义函数类型时除了不需要指定参数名和函数体外,和函数定义完全相同。

    下面的代码定义了两个函数类型变量(fun1和fun2)。

    var fun1: (inout String, Int) -> String var fun2: (String, String...) -> String

    我们直接将符合要求的函数赋给对应的函数变量,例如,下面两个函数分别符合fun1和fun2的要求,所以可以直接初始化这两个变量。

    func myFun1(inout name:String, age:Int) -> String { return "name:" + name + " age:" + String(age) } func myFun2(var header:String, strArray:String...) -> String { for s in strArray { header += " " + s } return header } // 初始化fun1 fun1 = myFun1 // 初始化fun2 fun2 = myFun2

    在调用时可以直接使用函数类型变量。例如,调用fun1和fun2的代码如下。

    var name:String = "bill" println(fun1(&name, 50)) println(fun2("Mike", "a","b"))

    函数类型也可以作为函数的参数类型,这样就可以将外部函数传入另一个函数或方法,然后在方法中调用该外部函数了。这样可以很容易实现函数的多态。

    // fun是函数类型参数 func myFun3(fun:(inout String, Int) -> String, str:String) { var name = "" println(fun(&name, 40)) } // 调用myFun3函数,fun1在前面的代码中已经定义了 myFun3(fun1, "hello")

    当然,函数的返回值类型也可以是函数类型的,也就是说,函数可以返回另外一个函数。

    func method1(n:Int) -> Int { return n*n } func method2(n:Int) -> Int { return 2*n } // myFun4的返回值是函数类型((Int) -> Int) func myFun4(flag:Bool) -> (Int) -> Int { // 根据参数值返回method1或method2 return flag ? method1:method2 } println(myFun4(true)(20)) println(myFun4(false)(20)) 执行这段代码会输出如下的内容。 400 40
    最新回复(0)