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
<
这是什么原因?
最佳答案
如果查看Comparable
的docs,可以看到它继承自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/