每個(gè)函數(shù)都有種特定的函數(shù)類(lèi)型,由函數(shù)的參數(shù)類(lèi)型和返回類(lèi)型組成。
例如:
func addTwoInts(a: Int, b: Int) -> Int {
return a + b
}
func multiplyTwoInts(a: Int, b: Int) -> Int {
return a * b
}
這個(gè)例子中定義了兩個(gè)簡(jiǎn)單的數(shù)學(xué)函數(shù):addTwoInts 和 multiplyTwoInts。這兩個(gè)函數(shù)都傳入兩個(gè) Int 類(lèi)型, 返回一個(gè)合適的Int值。
這兩個(gè)函數(shù)的類(lèi)型是 (Int, Int) -> Int,可以讀作“這個(gè)函數(shù)類(lèi)型,它有兩個(gè) Int 型的參數(shù)并返回一個(gè) Int 型的值。”。
下面是另一個(gè)例子,一個(gè)沒(méi)有參數(shù),也沒(méi)有返回值的函數(shù):
func printHelloWorld() {
println("hello, world")
}
這個(gè)函數(shù)的類(lèi)型是:() -> (),或者叫“沒(méi)有參數(shù),并返回 Void 類(lèi)型的函數(shù)”。沒(méi)有指定返回類(lèi)型的函數(shù)總返回Void。在Swift中,Void 與空的元組是一樣的。
在 Swift 中,使用函數(shù)類(lèi)型就像使用其他類(lèi)型一樣。例如,你可以定義一個(gè)類(lèi)型為函數(shù)的常量或變量,并將函數(shù)賦值給它:
var mathFunction: (Int, Int) -> Int = addTwoInts
這個(gè)可以讀作:
“定義一個(gè)叫做 mathFunction 的變量,類(lèi)型是‘一個(gè)有兩個(gè) Int 型的參數(shù)并返回一個(gè) Int 型的值的函數(shù)’,并讓這個(gè)新變量指向 addTwoInts 函數(shù)”。
addTwoInts 和 mathFunction 有同樣的類(lèi)型,所以這個(gè)賦值過(guò)程在 Swift 類(lèi)型檢查中是允許的。
現(xiàn)在,你可以用 mathFunction 來(lái)調(diào)用被賦值的函數(shù)了:
println("Result: \(mathFunction(2, 3))")
// prints "Result: 5"
有相同匹配類(lèi)型的不同函數(shù)可以被賦值給同一個(gè)變量,就像非函數(shù)類(lèi)型的變量一樣:
mathFunction = multiplyTwoInts
println("Result: \(mathFunction(2, 3))")
// prints "Result: 6"
就像其他類(lèi)型一樣,當(dāng)賦值一個(gè)函數(shù)給常量或變量時(shí),你可以讓 Swift 來(lái)推斷其函數(shù)類(lèi)型:
let anotherMathFunction = addTwoInts
// anotherMathFunction is inferred to be of type (Int, Int) -> Int
你可以用(Int, Int) -> Int這樣的函數(shù)類(lèi)型作為另一個(gè)函數(shù)的參數(shù)類(lèi)型。這樣你可以將函數(shù)的一部分實(shí)現(xiàn)交由給函數(shù)的調(diào)用者。
下面是另一個(gè)例子,正如上面的函數(shù)一樣,同樣是輸出某種數(shù)學(xué)運(yùn)算結(jié)果:
func printMathResult(mathFunction: (Int, Int) -> Int, a: Int, b: Int) {
println("Result: \(mathFunction(a, b))")
}
printMathResult(addTwoInts, 3, 5)
// prints "Result: 8”
這個(gè)例子定義了 printMathResult 函數(shù),它有三個(gè)參數(shù):第一個(gè)參數(shù)叫 mathFunction,類(lèi)型是(Int, Int) -> Int,你可以傳入任何這種類(lèi)型的函數(shù);第二個(gè)和第三個(gè)參數(shù)叫 a 和 b,它們的類(lèi)型都是 Int,這兩個(gè)值作為已給的函數(shù)的輸入值。
當(dāng) printMathResult 被調(diào)用時(shí),它被傳入 addTwoInts 函數(shù)和整數(shù)3和5。它用傳入3和5調(diào)用 addTwoInts,并輸出結(jié)果:8。
上一篇:Swift自定義運(yùn)算符下一篇:Swift決策