變數引數
有時,無法列出函式可能需要的引數數量。考慮一個 sum
函式:
func sum(_ a: Int, _ b: Int) -> Int {
return a + b
}
這適用於查詢兩個數字的總和,但是為了找到三個的總和,我們必須編寫另一個函式:
func sum(_ a: Int, _ b: Int, _ c: Int) -> Int {
return a + b + c
}
一個有四個引數需要另外一個,依此類推。Swift 可以使用三個週期的序列來定義具有可變數量引數的函式:...
。例如,
func sum(_ numbers: Int...) -> Int {
return numbers.reduce(0, combine: +)
}
請注意 numbers
引數(可變引數)如何合併為 [Int]
型別的單個 Array
。通常情況下,T...
型別的可變引數可以作為 [T]
訪問。
現在可以像這樣呼叫此函式:
let a = sum(1, 2) // a == 3
let b = sum(3, 4, 5, 6, 7) // b == 25
Swift 中的可變引數不必位於引數列表的末尾,但每個函式簽名中只能有一個引數。
有時,在引數數量上設定最小尺寸很方便。例如,採用沒有值的 sum
真的沒有意義。一種簡單的方法是強制執行此操作,方法是新增一些非變數的必需引數,然後再新增 variadic 引數。為了確保只能使用至少兩個引數呼叫 sum
,我們可以編寫
func sum(_ n1: Int, _ n2: Int, _ numbers: Int...) -> Int {
return numbers.reduce(n1 + n2, combine: +)
}
sum(1, 2) // ok
sum(3, 4, 5, 6, 7) // ok
sum(1) // not ok
sum() // not ok