将数组传递给Swift中具有可变数量的args的函数

将数组传递给Swift中具有可变数量的args的函数

Swift编程语言中,它说:

函数也可以采用可变数量的参数,将它们收集到一个数组中。

  func sumOf(numbers: Int...) -> Int {
      ...
  }

当我用逗号分隔的数字列表(`sumOf(1,2,3,4))调用这样的函数时,它们可以作为函数内的数组使用。

问:如果我已经有一个数字数组要传递给这个函数怎么办?

let numbers = [1, 2, 3, 4]sumOf(numbers)

这会因编译器错误而失败,“无法找到接受所提供参数的'__conversion'的重载”。有没有办法将现有数组转换为可以传递给可变函数的元素列表?


一只名叫tom的猫
浏览 942回答 3
3回答

郎朗坤

正如开发人员所证实的,Splatting还没有语言。现在的解决方法是使用重载或等待,如果您不能添加重载。

猛跑小猪

这是我发现的一项工作。我知道这不是你想要的,但似乎有效。第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的答案建议,您只需要更新这些功能。否则,您将不得不经历并进行大量重命名。

米琪卡哇伊

你可以施放这个功能:typealias Function = [Int] -> Intlet sumOfArray = unsafeBitCast(sumOf, Function.self)sumOfArray([1, 2, 3])
打开App,查看更多内容
随时随地看视频慕课网APP