亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將數組傳遞給Swift中具有可變數量的args的函數

將數組傳遞給Swift中具有可變數量的args的函數

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

3 回答

?
郎朗坤

TA貢獻1921條經驗 獲得超9個贊

正如開發人員所證實的,Splatting還沒有語言?,F在的解決方法是使用重載或等待,如果您不能添加重載。


查看完整回答
反對 回復 2019-08-12
?
猛跑小豬

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的答案建議,您只需要更新這些功能。否則,您將不得不經歷并進行大量重命名。


查看完整回答
反對 回復 2019-08-12
?
米琪卡哇伊

TA貢獻1998條經驗 獲得超6個贊

你可以施放這個功能:

typealias Function = [Int] -> Intlet sumOfArray = unsafeBitCast(sumOf, Function.self)sumOfArray([1, 2, 3])


查看完整回答
反對 回復 2019-08-12
  • 3 回答
  • 0 關注
  • 992 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號