在The Swift Programming Language中,它说:
函数也可以使用可变数量的参数,将它们收集到一个数组中 . func sumOf(numbers:Int ...) - > Int
当我用逗号分隔的数字列表(`sumOf(1,2,3,4))调用这样的函数时,它们在函数内部作为数组提供 .
问:如果我已经有一个数字数组要传递给这个函数怎么办?
let numbers = [1, 2, 3, 4]
sumOf(numbers)
这会因编译器错误而失败,“无法找到接受所提供参数的'__conversion'的重载” . 有没有办法将现有数组转换为可以传递给可变函数的元素列表?
6 回答
你可以施放这个功能:
您可以使用辅助函数:
Splatting is not in the language yet,由开发者证实 . 现在的解决方法是使用重载或等待,如果您不能添加重载 .
这是我发现的一项工作 . 我知道这不是你想要的,但似乎有效 .
第1步:使用数组而不是可变参数声明您想要的函数:
第2步:从可变参数函数中调用它:
第3步:呼叫任何一种方式:
这看起来很奇怪,但它在我的测试中起作用 . 如果这会给任何人带来无法预料的问题,请告诉我 . Swift似乎能够用相同的函数名分隔两个调用之间的差异 .
此外,使用此方法,如果Apple更新语言@ manojid的答案建议,您只需要更新这些功能 . 否则,你将不得不经历并进行大量重命名 .
我知道这个回答没有回答你的确切问题,但我觉得值得注意 . 我也开始玩Swift并立即遇到类似的问题 . 对于你的问题,Manojlds的答案更好,我同意,但同样,我提出了另一种解决方法 . 我碰巧也喜欢洛根更好 .
在我的情况下,我只是想传递一个数组:
只是想分享,以防其他人像我一样思考 . 大多数时候我更喜欢像这样传递数组,但我不认为“迅速” . :)
我做了这个(包装器身份映射):