位置:首頁 > 高級語言 > Swift教學 > Swift函數類型(參數類型和返回值類型)

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


函數類型語法
函數類型 → 類型 -> 類型