我想在Array扩展中编写一个通用方法,该方法具有一个参数类型,该参数类型也是一个元素类型相同的数组(对于数组扩展的调用者和参数)。这是我的意思(但它们都不起作用):
extension Array {
func doSomethingWithAnotherArray(arr: Self) {
}
}
extension Array {
func doSomethingWithAnotherArray<T: Array<Element>>(arr: T){
}
}
extension Array {
func doSomethingWithAnotherArray<T: Array<U>, U>(arr: T) where U == Element{
}
}
所以我可以将其用作:
let x = [1, 2]
let y = [3, 4]
x.doSomethingWithAnotherArray(arr: y)
Since x and y has the same elements.
答案 0 :(得分:1)
只需传递类型为Array
的参数
extension Array {
func doSomethingWithAnotherArray(arr: Array) {
... // do something
}
}
[Int].doSomethingWithAnotherArray(arr: [Int]) // works
[Int].doSomethingWithAnotherArray(arr: [String]) // doesn't work
答案 1 :(得分:1)
如果唯一的限制是参数的Element
与接收者的相同:
extension Array {
func doSomethingWithAnotherArray(arr: Array<Element>) {
// …
}
}
edit:如this answer所示,简单的Array
就足够了,因为该函数本身不是通用的,并且在通用类型的上下文中,Array
已专门用于接收器的类型。
如果您需要对Element
设置其他限制,请使用extension Array where Element …
。