为了账号安全,请及时绑定邮箱和手机立即绑定

将数组传递给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还没有语言。现在的解决方法是使用重载或等待,如果您不能添加重载。


查看完整回答
反对 回复 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 关注
  • 941 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信