Быстрое расширение последовательности, чтобы проверить, существует ли пересечение - PullRequest
0 голосов
/ 12 февраля 2020

Моя цель - сделать функцию доступной для всех Sequence, например, Array или Set.

Эта функция должна возвращать Bool, указывающую, присутствует ли хотя бы один объект в обеих последовательностях или нет.

// Usage
let s1 = ["hi", "hey", "ho"]
let s2:Set = ["woop", "oi", "yes"]

if s2.intersects(with: s1) {
  print("Happy me, it's a match")
}

extension Sequence where Element:Equatable {
    func intersects<T:Sequence>(with anotherSequence:T) -> Bool
    where T.Element: Equatable {
        //                  ⬇ error: `Extraneous argument label 'where:' in call`
        return self.contains(where: anotherSequence.contains)
    }
}

// doing the same function outside works:
let rez = s1.contains(where: s2.contains)
print(rez)

Мне кажется, что я почти на месте, но я не понимаю, почему первый contains(where:) дает мне эту ошибку. contains() и contains(where:) принадлежат Sequence нет?

Чего мне не хватает?

1 Ответ

1 голос
/ 12 февраля 2020

Ну, я нашел правильный синтаксис, не уверен, почему другой синтаксис не будет работать, хотя: /

Если бы кто-то еще мог объяснить, почему другой способ не работает, было бы интересно ?

extension Sequence where Element:Equatable {
    func intersects<T:Sequence>(with anotherSequence:T) -> Bool
        where T.Element == Self.Element {
        return self.contains(where: anotherSequence.contains)
    }
}
...