为什么转发可变参数无效?

yiz*_*lez 7 variadic-functions swift

考虑可变参数函数参数:

func foo(bar:Int...) -> () { }
Run Code Online (Sandbox Code Playgroud)

这里foo可以接受多个参数,例如foo(5,4).我很好奇Int...它的类型和支持的操作.例如,为什么这个无效?

func foo2(bar2:Int...) -> () {
    foo(bar2);
}
Run Code Online (Sandbox Code Playgroud)

给出错误:

无法找到接受所提供参数的'_conversion'的重载

为什么转发可变参数无效?

什么是编译器抱怨的"转换"?

Jea*_*let 7

当你调用时foo,编译器需要一系列参数,每个参数必须是一个Int.

在主体中foo2,bar2总结了所有传递的参数,并且实际上具有Int[]用于所有实际目的的类型.因此,你不能直接将它传递给foo- 作为foo想要的Int参数,而不是Int[].

至于解决方案:看看我对这个问题的回答.