[{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'
可比扩展需要写>
这个函数
这是什么原因?
答案 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;一个
因此,您必须实施<
和==
,但>
是不必要的。这就是为什么当你只有>
时它不起作用。