使用Generics调用具有相同参数但名称不同的另一个函数会在Swift中引发错误

时间:2014-06-07 02:42:14

标签: swift

我试图从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?

1 个答案:

答案 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)
}