class Test {
    var count: Int;
    init(count: Int) {
       self.count = count;
    }
}


extension Test: Comparable {
    static func <(lhs: Test, rhs: Test) -> Bool {
        return lhs.count > rhs.count
    }
}

当我编写这个扩展时,一切正常,但是当我将<更改为>编译器错误返回时
类型“Test”不符合协议“equalable”
此函数需要可比扩展名write<
这是什么原因?

最佳答案

如果查看Comparabledocs,可以看到它继承自Equatable
Equatable要求执行==

static func ==(lhs: Test, rhs: Test) -> Bool {
    return lhs.count == rhs.count
}

我还应该提到count没有初始值。所以您需要为Test添加一个初始值设定项,或者为count添加一个初始值。
编辑:
如果查看Comparable的文档,您会发现:
具有可比较一致性的类型实现小于运算符(以及等于运算符(=)。这两次行动要求
类型值的总顺序,其中
对于任意两个值a和b,必须满足以下条件:
a==b
ab因此,必须实现<==,但>是不必要的。这就是为什么只有>时它不起作用。

关于swift - Swift可比协议(protocol)胜于方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49394154/

10-10 09:24