我有一个只需要>
函数的协议。当我尝试比较两个符合协议的对象时,我出现了一个编译器错误,消息为“表达式类型不明确,没有更多上下文”。如果可以避免的话,我宁愿不要使用功能isGreaterThan(...)
(或其他功能),而是要坚持人们习惯于进行比较的内容(>
)。
所以我有两个问题。我为什么不能这样做?有没有更好的方法可以做到这一点,或者有一个好的解决方法?
谢谢!
protocol Compare {
func >(lhs: Compare, rhs: Compare) -> Bool
}
class TheClass {
func hey(aCompare: Compare, theCompare: Compare) {
if aCompare > theCompare {
print("aCompare is greater than theCompare")
}
}
}
最佳答案
我应该像使用Apple的>
和Self
协议那样使用Equatable
而不是在Comparable
运算符中使用协议。
protocol Compare {
func >(lhs: Self, rhs: Self) -> Bool
}
class TheClass {
func hey(aCompare: Compare, theCompare: Compare) {
if aCompare > theCompare {
print("aCompare is greater than theCompare")
}
}
}
现在编译..谢谢@jrturton和@ originaluser2