我有以下我想要 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/