函數(shù)類型表示一個函數(shù)、方法或閉包的類型,它由一個參數(shù)類型和返回值類型組成,中間用箭頭->隔開:
parameter type -> return type由于 參數(shù)類型 和 返回值類型 可以是元組類型,所以函數(shù)類型可以讓函數(shù)與方法支持多參數(shù)與多返回值。
你可以對函數(shù)類型應(yīng)用帶有參數(shù)類型()并返回表達(dá)式類型的auto_closure屬性(見類型屬性章節(jié))。一個自動閉包函數(shù)捕獲特定表達(dá)式上的隱式閉包而非表達(dá)式本身。下面的例子使用auto_closure屬性來定義一個很簡單的assert函數(shù):
func simpleAssert(condition: @auto_closure () -> Bool, message: String){
if !condition(){
println(message)
}
}
let testNumber = 5
simpleAssert(testNumber % 2 == 0, "testNumber isn't an even number.")
// prints "testNumber isn't an even number."
函數(shù)類型可以擁有一個可變長參數(shù)作為參數(shù)類型中的最后一個參數(shù)。從語法角度上講,可變長參數(shù)由一個基礎(chǔ)類型名字和...組成,如Int...??勺冮L參數(shù)被認(rèn)為是一個包含了基礎(chǔ)類型元素的數(shù)組。即Int...就是Int[]。關(guān)于使用可變長參數(shù)的例子,見章節(jié)“可變長參數(shù)”。
為了指定一個in-out參數(shù),可以在參數(shù)類型前加inout前綴。但是你不可以對可變長參數(shù)或返回值類型使用inout。關(guān)于In-Out參數(shù)的討論見章節(jié)In-Out參數(shù)部分。
柯里化函數(shù)(curried function)的類型相當(dāng)于一個嵌套函數(shù)類型。例如,下面的柯里化函數(shù)addTwoNumber()()的類型是Int -> Int -> Int:
func addTwoNumbers(a: Int)(b: Int) -> Int{
return a + b
}
addTwoNumbers(4)(5) // returns 9
柯里化函數(shù)的函數(shù)類型從右向左組成一組。例如,函數(shù)類型Int -> Int -> Int可以被理解為Int -> (Int -> Int)——也就是說,一個函數(shù)傳入一個Int然后輸出作為另一個函數(shù)的輸入,然后又返回一個Int。例如,你可以使用如下嵌套函數(shù)來重寫柯里化函數(shù)addTwoNumbers()():
func addTwoNumbers(a: Int) -> (Int -> Int){
func addTheSecondNumber(b: Int) -> Int{
return a + b
}
return addTheSecondNumber
}
addTwoNumbers(4)(5) // Returns 9