我有一个只需要>函数的协议。当我尝试比较两个符合协议的对象时,我出现了一个编译器错误,消息为“表达式类型不明确,没有更多上下文”。如果可以避免的话,我宁愿不要使用功能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

09-12 05:29