將數(shù)組傳遞給Swift中具有可變數(shù)量的args的函數(shù)在Swift編程語言中,它說:函數(shù)也可以采用可變數(shù)量的參數(shù),將它們收集到一個(gè)數(shù)組中。 func sumOf(numbers: Int...) -> Int {
...
}當(dāng)我用逗號(hào)分隔的數(shù)字列表(`sumOf(1,2,3,4))調(diào)用這樣的函數(shù)時(shí),它們可以作為函數(shù)內(nèi)的數(shù)組使用。問:如果我已經(jīng)有一個(gè)數(shù)字?jǐn)?shù)組要傳遞給這個(gè)函數(shù)怎么辦?let numbers = [1, 2, 3, 4]sumOf(numbers)這會(huì)因編譯器錯(cuò)誤而失敗,“無法找到接受所提供參數(shù)的'__conversion'的重載”。有沒有辦法將現(xiàn)有數(shù)組轉(zhuǎn)換為可以傳遞給可變函數(shù)的元素列表?
3 回答

郎朗坤
TA貢獻(xiàn)1921條經(jīng)驗(yàn) 獲得超9個(gè)贊
正如開發(fā)人員所證實(shí)的,Splatting還沒有語言。現(xiàn)在的解決方法是使用重載或等待,如果您不能添加重載。

猛跑小豬
TA貢獻(xiàn)1858條經(jīng)驗(yàn) 獲得超8個(gè)贊
這是我發(fā)現(xiàn)的一項(xiàng)工作。我知道這不是你想要的,但似乎有效。
第1步:使用數(shù)組而不是可變參數(shù)聲明您想要的函數(shù):
func sumOf(numbers: [Int]) -> Int { var total = 0 for i in numbers { total += i } return total}
第2步:從可變參數(shù)函數(shù)中調(diào)用它:
func sumOf(numbers: Int...) -> Int { return sumOf(numbers)}
第3步:呼叫任何一種方式:
var variadicSum = sumOf(1, 2, 3, 4, 5) var arraySum = sumOf([1, 2, 3, 4, 5])
這看起來很奇怪,但它在我的測(cè)試中起作用。如果這會(huì)導(dǎo)致任何人無法預(yù)料的問題,請(qǐng)告訴我。Swift似乎能夠用相同的函數(shù)名來區(qū)分兩個(gè)調(diào)用之間的差異。
此外,使用此方法,如果Apple更新語言@ manojid的答案建議,您只需要更新這些功能。否則,您將不得不經(jīng)歷并進(jìn)行大量重命名。

米琪卡哇伊
TA貢獻(xiàn)1998條經(jīng)驗(yàn) 獲得超6個(gè)贊
你可以施放這個(gè)功能:
typealias Function = [Int] -> Intlet sumOfArray = unsafeBitCast(sumOf, Function.self)sumOfArray([1, 2, 3])
- 3 回答
- 0 關(guān)注
- 1011 瀏覽
添加回答
舉報(bào)
0/150
提交
取消