可變參數(shù)
一個(gè)可變參數(shù)(variadic parameter)可以接受零個(gè)或多個(gè)值。函數(shù)調(diào)用時(shí),你可以用可變參數(shù)來(lái)指定函數(shù)參數(shù)可以被傳入不確定數(shù)量的輸入值。通過(guò)在變量類(lèi)型名后面加入(...)的方式來(lái)定義可變參數(shù)。
可變參數(shù)的傳入值在函數(shù)體中變?yōu)榇祟?lèi)型的一個(gè)數(shù)組。例如,一個(gè)叫做 numbers 的 Double... 型可變參數(shù),在函數(shù)體內(nèi)可以當(dāng)做一個(gè)叫 numbers 的 [Double] 型的數(shù)組常量。
下面的這個(gè)函數(shù)用來(lái)計(jì)算一組任意長(zhǎng)度數(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 個(gè)數(shù)的平均數(shù)。
arithmeticMean(3, 8.25, 18.75)
// 返回 10.0, 是這 3 個(gè)數(shù)的平均數(shù)
??一個(gè)函數(shù)最多只能擁有一個(gè)可變參數(shù)
輸入輸出參數(shù)
函數(shù)參數(shù)默認(rèn)是常量。試圖在函數(shù)體中更改參數(shù)值將會(huì)導(dǎo)致編譯錯(cuò)誤(compile-time error)。這意味著你不能錯(cuò)誤地更改參數(shù)值。如果你想要一個(gè)函數(shù)可以修改參數(shù)的值,并且想要在這些修改在函數(shù)調(diào)用結(jié)束后仍然存在,那么就應(yīng)該把這個(gè)參數(shù)定義為輸入輸出參數(shù)(In-Out Parameters)。定義一個(gè)輸入輸出參數(shù)時(shí),在參數(shù)定義前加 inout關(guān)鍵字。一個(gè)輸入輸出參數(shù)有傳入函數(shù)的值,這個(gè)值被函數(shù)修改,然后被傳出函數(shù),替換原來(lái)的值。想獲取更多的關(guān)于輸入輸出參數(shù)的細(xì)節(jié)和相關(guān)的編譯器優(yōu)化,請(qǐng)查看輸入輸出參數(shù)一節(jié)。你只能傳遞變量給輸入輸出參數(shù)。你不能傳入常量或者字面量,因?yàn)檫@些量是不能被修改的。當(dāng)傳入的參數(shù)作為輸入輸出參數(shù)時(shí),需要在參數(shù)名前加 & 符,表示這個(gè)值可以被函數(shù)修改。
?? 輸入輸出參數(shù)不能有默認(rèn)值,而且可變參數(shù)(指上面的參數(shù)個(gè)數(shù))不能用 inout 標(biāo)記。