Swift Comparable Protocol比方法更好

时间:2018-03-20 21:10:46

标签: swift swift4 comparable

[{name: jonh}, {name: james}]

当我编写此扩展时,一切正常,但是当我将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 } } 更改为<编译器错误返回时

  

类型'测试'不符合协议'Equatable'

可比扩展需要写>这个函数 这是什么原因?

1 个答案:

答案 0 :(得分:1)

如果您查看Comparable的{​​{3}},就可以看到它继承自Equatable

Equatable要求==实施:

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

我还应该提到count没有初始值。因此,您需要为Test添加初始值设定项或向count添加初始值。

编辑:

如果你查看Comparable的文档,你会发现这一点:

  

具有可比性一致性的类型实现小于运算符(&lt;)   和等于运算符(==)。这两项操作都是严格的   一个类型的值的总顺序,其中只有一个   对于任何两个值a和b,必须满足以下条件:

     
      
  • a == b
  •   
  • a&lt; b
  •   
  • b&lt;一个
  •   

因此,您必须实施<==,但>是不必要的。这就是为什么当你只有>时它不起作用。