函數(shù)類型
Swift語言中每一個函數(shù)都有它特定的數(shù)據(jù)類型乘陪,稱其為函數(shù)類型
函數(shù)類型和基本數(shù)據(jù)類型一樣,可以定義變量或者常量奄容,可以定義函數(shù)形參冰更,也可以做為函數(shù)的返回值類型
函數(shù)類型的格式為:參數(shù)列表的數(shù)據(jù)類型—>返回值類型
<1>func test1(name: String,age: Int)->String{}
函數(shù)類型:(String,Int)->String
<2>func test2(a: Int){}
函數(shù)類型:(Int)->() 或者 (Int)->Void
<3>func test3(){}
函數(shù)類型:()->() 或者 ()->Void
定義函數(shù)類型的變量
func sumAAndB(a: Int,b: Int) -> Int {//函數(shù)類型為(Int,Int)->Int
return a + b
}
var myFunction: (Int,Int)->Int = sumAAndB//myFunction 的類型標注為函數(shù)類型
func shapePan(width: Int,height: Int) ->Int {
return (height + width) * 2
}
myFunction = shapePan //可以將函數(shù)賦給相同函數(shù)類型的變量
使用函數(shù)類型定義函數(shù)形參
例子:實現(xiàn)數(shù)組中的數(shù)據(jù)排序:
var array = [1,1231,124,54654,10]
//數(shù)組升序函數(shù)
func isBigerSort(oneNum: Int,twoNum: Int)->Bool {
return oneNum > twoNum
}
//數(shù)組降序函數(shù)
func isSmallerSort(oneNum: Int,twoNum: Int) ->Bool {
return oneNum < twoNum
}
//兩個數(shù)交換數(shù)組中的顯示位置的函數(shù)
func exchangeNumIndex(inout one: Int,inout two: Int) -> Void {
let tmp = one
one = two
two = tmp
}
//排序函數(shù)昂勒,其中method為函數(shù)類型的參數(shù)
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])
}
}
}
}
函數(shù)調(diào)用——實現(xiàn)升序
sortArray(&array, method: isBigerSort)//傳入數(shù)組地址和相同函數(shù)類型的函數(shù)
print(array)
函數(shù)調(diào)用--實現(xiàn)降序
sortArray(&array, method: isSmallerSort)
print(array)
函數(shù)類型作為函數(shù)的返回值類型
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
}
}
函數(shù)調(diào)用:
var myFunc = getShapeMeter("triangle")
print(myFunc(10))
函數(shù)類型作為函數(shù)形參蜀细,通過判斷形參對應的方法能使一個函數(shù)實現(xiàn)不同的功能