您的位置:首页 > 移动开发 > Swift

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

2017-03-16 17:55 204 查看
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(width: 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)
 
函数类型作为函数的返回值类型
 
4000

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))
函数类型作为函数形参,通过判断形参对应的方法能使一个函数实现不同的功能
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: