可變參數(shù)
一個可變參數(shù)(variadic parameter)可以接受零個或多個值要销。函數(shù)調(diào)用時袍嬉,你可以用可變參數(shù)來指定函數(shù)參數(shù)可以被傳入不確定數(shù)量的輸入值墩莫。通過在變量類型名后面加入(...)的方式來定義可變參數(shù)延塑。
可變參數(shù)的傳入值在函數(shù)體中變?yōu)榇祟愋偷囊粋€數(shù)組音诈。例如幻碱,一個叫做 numbers 的 Double... 型可變參數(shù),在函數(shù)體內(nèi)可以當做一個叫 numbers 的 [Double] 型的數(shù)組常量细溅。
下面的這個函數(shù)用來計算一組任意長度數(shù)字的 算術(shù)平均數(shù)(arithmetic mean):
func arithmeticMean(_ numbers: Double...) -> Double {
var total: Double = 0
for number in numbers {
total += number
}
return total / Double(numbers.count)
}
arithmeticMean(1, 2, 3, 4, 5)
// 返回 3.0, 是這 5 個數(shù)的平均數(shù)褥傍。
arithmeticMean(3, 8.25, 18.75)
// 返回 10.0, 是這 3 個數(shù)的平均數(shù)
??一個函數(shù)最多只能擁有一個可變參數(shù)
輸入輸出參數(shù)
函數(shù)參數(shù)默認是常量。試圖在函數(shù)體中更改參數(shù)值將會導(dǎo)致編譯錯誤(compile-time error)喇聊。這意味著你不能錯誤地更改參數(shù)值恍风。如果你想要一個函數(shù)可以修改參數(shù)的值,并且想要在這些修改在函數(shù)調(diào)用結(jié)束后仍然存在誓篱,那么就應(yīng)該把這個參數(shù)定義為輸入輸出參數(shù)(In-Out Parameters)朋贬。定義一個輸入輸出參數(shù)時,在參數(shù)定義前加 inout關(guān)鍵字窜骄。一個輸入輸出參數(shù)有傳入函數(shù)的值锦募,這個值被函數(shù)修改,然后被傳出函數(shù)邻遏,替換原來的值糠亩。想獲取更多的關(guān)于輸入輸出參數(shù)的細節(jié)和相關(guān)的編譯器優(yōu)化,請查看輸入輸出參數(shù)一節(jié)准验。你只能傳遞變量給輸入輸出參數(shù)赎线。你不能傳入常量或者字面量,因為這些量是不能被修改的糊饱。當傳入的參數(shù)作為輸入輸出參數(shù)時垂寥,需要在參數(shù)名前加 & 符,表示這個值可以被函數(shù)修改。
?? 輸入輸出參數(shù)不能有默認值矫废,而且可變參數(shù)(指上面的參數(shù)個數(shù))不能用 inout 標記盏缤。