Swift函數類型(參數類型和返回值類型)
函數類型
函數類型表示一個函數、方法或閉包的類型,它由一個參數類型和返回值類型組成,中間用箭頭->
隔開:
-
parameter type
->return type
由於 參數類型 和 返回值類型 可以是元組類型,所以函數類型可以讓函數與方法支持多參數與多返回值。
你可以對函數類型應用帶有參數類型()
並返回表達式類型的auto_closure
屬性(見類型屬性章節)。一個自動閉包函數捕獲特定表達式上的隱式閉包而非表達式本身。下麵的例子使用auto_closure
屬性來定義一個很簡單的assert函數:
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."
函數類型可以擁有一個可變長參數作為參數類型中的最後一個參數。從語法角度上講,可變長參數由一個基礎類型名字和...
組成,如Int...
。可變長參數被認為是一個包含了基礎類型元素的數組。即Int...
就是Int[]
。關於使用可變長參數的例子,見章節“可變長參數”。
為了指定一個in-out
參數,可以在參數類型前加inout
前綴。但是你不可以對可變長參數或返回值類型使用inout
。關於In-Out參數的討論見章節In-Out參數部分。
柯裡化函數(curried function)的類型相當於一個嵌套函數類型。例如,下麵的柯裡化函數addTwoNumber()()
的類型是Int -> Int -> Int
:
func addTwoNumbers(a: Int)(b: Int) -> Int{
return a + b
}
addTwoNumbers(4)(5) // returns 9
柯裡化函數的函數類型從右向左組成一組。例如,函數類型Int -> Int -> Int
可以被理解為Int -> (Int -> Int)
——也就是說,一個函數傳入一個Int
然後輸出作為另一個函數的輸入,然後又返回一個Int
。例如,你可以使用如下嵌套函數來重寫柯裡化函數addTwoNumbers()()
:
func addTwoNumbers(a: Int) -> (Int -> Int){
func addTheSecondNumber(b: Int) -> Int{
return a + b
}
return addTheSecondNumber
}
addTwoNumbers(4)(5) // Returns 9