我有以下课程,我想拥有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
}
}
代码有什么问题
答案 0 :(得分:3)
问题是数组中的T不一定是Equatable。因此,您无法在扩展程序中使用==
。
您收到该错误的原因是编译器正在尽力找到可以使用的名为==
的函数。它恰好是找到你的==
函数,但它会出错,因为它实际上并不匹配类型。
注意:编译器显然可以使用一些可用性工作及其错误消息