讀古今文學網 > iOS編程基礎:Swift、Xcode和Cocoa入門指南 > 2.5 可變參數 >

2.5 可變參數

參數可以是可變參數。這意味著調用者可以根據需要提供多個該參數類型的值,中間用逗號分隔;函數體會將這些值當作數組。

要想將參數標記為可變參數,參數後要跟著3個點,如下所示:


func sayStrings(arrayOfStrings:String ...) {
    for s in arrayOfStrings { print(s) }
}  

下面是調用方式:


sayStrings("hey", "ho", "nonny nonny no")  

在Swift的早期版本中,可變參數只能是最後一個參數;不過,Swift 2.0放寬了這個限制。現在的限制是一個函數最多只能聲明一個可變參數(否則就無法確定值列表結束的位置)。比如:


func sayStrings(arrayOfStrings:String ..., times:Int) {
    for _ in 1...times {
        for s in arrayOfStrings { print(s) }
    }
}  

下面是調用方式:


sayStrings("Mannie", "Moe", "Jack", times:3)  

全局print函數的第1個參數就是個可變參數,因此可以通過一條命令輸出多個值:


print("Mannie", 3, true) // Mannie 3 true  

默認參數對輸出還做了進一步的細化。默認的separator:是個空格(當提供了多個值),默認的terminator:是個換行符;你可以修改它們:


print("Mannie", "Moe", separator:", ", terminator: ", ")
print("Jack")
// output is "Mannie, Moe, Jack" on one line  

遺憾的是,Swift語言中有一個陷阱:沒辦法將數組轉換為逗號分隔的參數列表(相比於Ruby中的splat)。如果一開始就有一個某種類型的數組,那麼你不能在需要該類型可變參數的地方使用它。