Swift 扩展等式的元组数组以查找第一个元组匹配

Swift 扩展等式的元组数组以查找第一个元组匹配,swift,Swift,这可能是一个noob问题,但我似乎无法写出这样的东西 extension Array where Element == (E1, E2), E1: Equatable, E2: Equatable { func contains(_ tuple: (E1, E2)) -> Bool { return contains { $0.0 == tuple.0 && $0.1 == tuple.1 } } } func inArray<E1:

这可能是一个noob问题,但我似乎无法写出这样的东西

extension Array where Element == (E1, E2), E1: Equatable, E2: Equatable {
    func contains(_ tuple: (E1, E2)) -> Bool {
        return contains { $0.0 == tuple.0 && $0.1 == tuple.1 }
    }
}
func inArray<E1: Equatable, E2: Equatable>(_ tuple: (E1, E2), _ array: [(E1, E2)]) -> Bool {
    return array.contains { t in t.0 == tuple.0 && t.1 == tuple.1 }
}
我想要的是扩展一个由
equalable
值组成的元组数组,这样我就可以确定某个元组是否属于该数组

我可以写一个这样的自由函数

extension Array where Element == (E1, E2), E1: Equatable, E2: Equatable {
    func contains(_ tuple: (E1, E2)) -> Bool {
        return contains { $0.0 == tuple.0 && $0.1 == tuple.1 }
    }
}
func inArray<E1: Equatable, E2: Equatable>(_ tuple: (E1, E2), _ array: [(E1, E2)]) -> Bool {
    return array.contains { t in t.0 == tuple.0 && t.1 == tuple.1 }
}
func-inArray(u元组:(E1,E2),u数组:[(E1,E2)])->Bool{
return array.contains{t in t.0==tuple.0&&t.1==tuple.1}
}
,但如果可能的话,我想将此函数附加到
数组


还要注意的是,我有点拘泥于元组,因此不能使用其他构造,如
equalable
structs/enum/classes来对此进行建模。

您可以通过约束方法而不是 分机:

extension Array  {
    func contains<E1, E2>(_ tuple: (E1, E2)) -> Bool where E1: Equatable, E2: Equatable, Element == (E1, E2) {
        return contains { $0.0 == tuple.0 && $0.1 == tuple.1 }
    }
}
扩展数组{
func包含(\tuple:Element)->Bool,其中Element==(T,U){
返回包含{tuple.0==0.0&&tuple.1==0.1}
}
}

我认为在元组数组中存储的内容最好存储在元组数组中。@Sweeper是的,我知道,但我需要的上下文需要元组…可能的重复不会将方法添加到几乎任何类型的数组中,影响类型安全吗?@Cristik No.
E1
E2
都受到约束,这意味着
元素
也受到约束。直到现在,我还不知道可以在泛型方法中约束周围类的泛型参数!