參數可以是可變參數。這意味著調用者可以根據需要提供多個該參數類型的值,中間用逗號分隔;函數體會將這些值當作數組。
要想將參數標記為可變參數,參數後要跟著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)。如果一開始就有一個某種類型的數組,那麼你不能在需要該類型可變參數的地方使用它。