Swift 快速扩展序列以检查交叉点是否存在

Swift 快速扩展序列以检查交叉点是否存在,swift,sequence,swift-extensions,Swift,Sequence,Swift Extensions,我的目标是通过所有序列(如数组或集合)提供一个函数 此函数应返回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 i

我的目标是通过所有序列(如数组或集合)提供一个函数

此函数应返回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)
我感觉我就快到了,但我不明白为什么第一个containswhere:给了我这个错误。 contains和containswhere:属于序列号吗


我遗漏了什么?

我找到了正确的语法,不确定为什么其他语法不起作用:/


如果有人能解释为什么另一种方法不起作用,我会把方法名改为intersects。顺便说一句,您不需要一个闭包func intersectswith sequence:S->Bool其中S.Element==Element,Element:equalable{containswwhere:sequence.contains}在语法上没有什么不同,区别在于泛型where子句。原始实现的问题是Equalable只适用于同一类型的两个实例,因此简单地说两个序列都是Equalable并不能保证它们可以被检查是否相等。但是,使Sequence.Element可相等,并使Sequence.Element==OtherSequence.Element确保它们可以被检查为相等。我所说的语法是指使其工作的方法,这是语言“对不起”的错误。我确实认为,通过保持平衡,它可以让我在任何类型之间进行比较。谢谢你的解释!