我试图从someMethodA调用someMethodB并获得以下编译错误Cannot convert the expression's type '$T2[]' to type 'T[]'
func someMethodA<T : Equatable>(array: T[], values: T...) -> T[] {
return self.someMethodB(array, values: values)
}
func someMethodB<T : Equatable>(array: T[], values: T...) -> T[] {
...
}
似乎是由于可变参数引起的问题。如何将转换为数组的值作为variadic传递给someMethodB?
答案 0 :(得分:2)
MethodB采用可变参数的第二个参数,但您要发送一个数组。您可以将MethodB的方法签名更改为:
someMethodB<T : Equatable>(array: T[], values: T[]) -> T[]{ /* code */ }
将variadic参数传递给方法时,它会转换为数组。因此,值实际上是T[]
而不是T...
编辑:如果你仍然需要一个带有可变参数的someMethodB,你可以让它调用一个接受数组的那个:
func someMethodB<T : Equatable>(array: T[], values: T...) -> T[] {
return someMethodB(array, values:values)
}