8 函数类型——《Swift3.0从入门到出家

Swift语言中每一个函数都有它特定的数据类型,称其为函数类型

函数类型和基本数据类型一样,可以定义变量或者常量,可以定义函数形参,也可以做为函数的返回值类型

 

函数类型的格式为:参数列表的数据类型—>返回值类型

 

<1>func test1(name: String,age: Int)->String{}

 

函数类型:(String,Int)->String

<2>func test2(a: Int){}

 

函数类型:(Int)->() 或者 (Int)->Void

 

<3>func test3(){}

 

函数类型:()->() 或者 ()->Void

 

定义函数类型的变量

func sumAAndB(a: Int,b: Int) -> Int {//函数类型为(Int,Int)->Int

    return a + b

}

var myFunction: (Int,Int)->Int = sumAAndB//myFunction 的类型标注为函数类型

 

func shapePan( Int,height: Int) ->Int {

    return (height + width) * 2

}

myFunction = shapePan //可以将函数赋给相同函数类型的变量

 

 

使用函数类型定义函数形参

 

例子:实现数组中的数据排序:

var array = [1,1231,124,54654,10]

//数组升序函数

func isBigerSort(oneNum: Int,twoNum: Int)->Bool {

    return oneNum > twoNum

}

//数组降序函数

func isSmallerSort(oneNum: Int,twoNum: Int) ->Bool {   

   return oneNum < twoNum

}

//两个数交换数组中的显示位置的函数

func exchangeNumIndex(inout one: Int,inout two: Int) -> Void {

    let tmp = one

    one = two

    two = tmp

}

//排序函数,其中method为函数类型的参数

func sortArray(inout arr: [Int],method: (Int,Int)->Bool) {  

   for i in 0..<arr.count - 1 {

        for j in 0..<arr.count - i - 1 {    

            if method(arr[j],arr[j + 1]) {

                exchangeNumIndex(&arr[j], two: &arr[j + 1])

            }

        }

    }

    

}

//实现升序

sortArray(&array, method: isBigerSort)//传入数组地址和相同函数类型的函数

print(array)

//实现降序

sortArray(&array, method: isSmallerSort)

print(array)

 

函数类型作为函数的返回值类型

 

func triangle(length: Int) ->Int {

    return 3 * length

}

func square(length: Int) ->Int {

    return 4 * length

}

func circle(r: Int) ->Int {    

    return Int(3.14) * r * r

}

func getShapeMeter(type: String) ->(Int)->Int {  

    switch type {

    case "triangle":

        return triangle

    case "square":

        return square

    default:

        return circle

    }

}

var myFunc = getShapeMeter("triangle")

print(myFunc(10))

函数类型作为函数形参,通过判断形参对应的方法能使一个函数实现不同的功能

原文地址:https://www.cnblogs.com/zhyunfe/p/5842031.html