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

猛跑小豬
TA貢獻1858條經驗 獲得超8個贊
這是我發現的一項工作。我知道這不是你想要的,但似乎有效。
第1步:使用數組而不是可變參數聲明您想要的函數:
func sumOf(numbers: [Int]) -> Int { var total = 0 for i in numbers { total += i } return total}
第2步:從可變參數函數中調用它:
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])
這看起來很奇怪,但它在我的測試中起作用。如果這會導致任何人無法預料的問題,請告訴我。Swift似乎能夠用相同的函數名來區分兩個調用之間的差異。
此外,使用此方法,如果Apple更新語言@ manojid的答案建議,您只需要更新這些功能。否則,您將不得不經歷并進行大量重命名。

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