为什么协议中的运算符需要更多上下文?

时间:2016-06-23 18:53:19

标签: swift protocols

我的协议只需要>功能。当我尝试比较符合协议的两个对象时,我给出了一个编译器错误,消息“表达式类型不明确而没有更多上下文”。我宁愿不要求函数isGreaterThan(...)(或其他东西),如果我可以避免它,我宁愿坚持使用人们习惯比较的东西(>)。

所以我有2个问题。为什么我不能这样做?有没有更好的方法来做到这一点,或者是一个好的解决方法?

谢谢!

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")
        }
    }

}

1 个答案:

答案 0 :(得分:0)

我应该使用像>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