Подпись метода, чтобы взять тот же массив в расширении массива - PullRequest
0 голосов
/ 26 декабря 2018

Я хочу написать универсальный метод в расширении 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.

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Если единственным ограничением является то, что Element аргумента совпадает с аргументом получателя:

extension Array {
    func doSomethingWithAnotherArray(arr: Array<Element>) {
        // …
    }
}

edit: как видно из этого ответа , простой *Достаточно 1007 *, так как эта функция сама по себе не является общей и в контексте универсального типа, Array уже специализирована для типа получателя.

Если вам нужно наложить другие ограничения на Element, используйте extension Array where Element ….

0 голосов
/ 26 декабря 2018

Просто передайте параметр типа Array

extension Array {
    func doSomethingWithAnotherArray(arr: Array) {
        ... // do something  
    }
}

[Int].doSomethingWithAnotherArray(arr: [Int]) // works
[Int].doSomethingWithAnotherArray(arr: [String]) // doesn't work
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...