Swift - 实现平等?

标签 swift operators

我有以下我想要 Equatable 的类(class)。一切正常,除了操作符似乎完全覆盖了全局 == 操作符。

// 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
    }
}

代码有什么问题

最佳答案

问题是 Array 中的 T 不一定是 Equatable。因此,您不能在扩展中使用 ==

你得到这个错误的原因是编译器正在尽最大努力找到一个可以使用的函数,叫做 ==。它恰好找到了您的 == 函数,但它给出了一个错误,因为它实际上与类型不匹配。

注意:编译器显然可以通过其错误消息传递一些可用性工作

关于Swift - 实现平等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25235204/

相关文章:

swift - 我无法在调试器中看到变量的值

c++ - 比较运算符重载

c++ - 如何将运算符作为默认仿函数参数传递?

ios - 如何在 Objective-C 和 Swift 项目中使用 RxSwift?

xcode - 以 ActionSheet 样式访问图片库

ios - 更新 SnapKit 约束偏移量

ios - 关于使用 xctest 在 swift 和 ios 中模拟单例的查询?

c# - 如何重载 C# 中的方括号运算符?

python - 为什么求幂从右到左?

javascript 测试是否存在两个标志中的任何一个