Swift的等同协议一致性检查

Kha*_*yen 5 ios swift

我试图Array用以下函数扩展Swift的类:

func containsObjectIdenticalTo(obj: T) -> Bool {
    // objectPassingTest returns the first object passing the test
    return objectPassingTest { x in x == obj }
}
Run Code Online (Sandbox Code Playgroud)

显然,这不会编译,因为编译器还不知道是否==为类型实现T.然后我将代码更改为此

func containsObjectIdenticalTo(obj: T) -> Bool {
    return objectPassingTest {
        x in
        assert(x is Equatable && obj is Equatable)
        return (x as Equatable) == (obj as Equatable)
    } != nil
}
Run Code Online (Sandbox Code Playgroud)

哪个也不起作用,因为Equatable无法检查一致性(因为Equatable没有定义@obj)!

有什么想法吗?如果有一些方法可以直接断言,如果T符合Equatable,但是我没有在任何地方读过它会很好.在这些东西中,Swift似乎没有Obj-C那么动态.

更新: 尝试了这个建议,它不起作用(不知道究竟是什么<T: Equatable>,它编译).

func containsObjectIdenticalTo<T: Equatable>(obj: T) -> Bool {
    var x = self[0]
    var y = self[0]
    return x == y // Error here
}
Run Code Online (Sandbox Code Playgroud)

Con*_*nor 4

指定方法签名中的 T 必须相等:

func containsObjectIdenticalTo<T: Equatable>(obj: T) -> Bool {/*...*/}
Run Code Online (Sandbox Code Playgroud)