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