Swift - 实现Equatable?

时间:2014-08-11 02:41:11

标签: swift operators

我有以下课程,我想拥有Equatable。一切正常,除非运算符完全覆盖全局==运算符。

// User.swift
class User: Equatable {
    let id: Int

    init(_ id: Int) {
        self.id = id
    }
}

func == (lhs: User, rhs: User) -> Bool {
    return (lhs.id == rhs.id)
}

当我尝试使用==时,似乎在代码的其他地方它抱怨" T不能转换为User"。但这是一个完全不同的类,与用户

无关
// ArrayExtension.swift
extension Array {

    public func contains(object: T) -> Bool {
        for x in self {
            // Compile error here "T is not convertible to User"
            if (x == object) {
                return true
            }
        }

        return false
    }
}

代码有什么问题

1 个答案:

答案 0 :(得分:3)

问题是数组中的T不一定是Equatable。因此,您无法在扩展程序中使用==

您收到该错误的原因是编译器正在尽力找到可以使用的名为==的函数。它恰好是找到你的==函数,但它会出错,因为它实际上并不匹配类型。

注意:编译器显然可以使用一些可用性工作及其错误消息