Swift:二进制运算符 '<' 不能应用于两个 'Comparable' 操作数



我定义了一个协议,其中包含一个函数,该函数返回用户可以在其协议实现中定义的关联类型。唯一的要求是关联的类型符合Comparable.

我有另一个类,它使用符合此协议的元素。我遇到的问题是,编译器抱怨我不能比较关联类型的元素,即使我在协议定义中特别将它们标记为Comparable。有人知道我哪里做错了吗?

protocol MyElement {
associatedtype T : Comparable
func getValue() -> T
}
class MyNode {
init(elements:[any MyElement]) {

// Sort the elements
let sortedElements = elements.sorted(by: { ( a:any MyElement, b:any MyElement ) -> Bool in
let aT = a.getValue()
let bT = b.getValue()

return aT < bT
})

}
}

编译器在at:

binary operator '<' cannot be applied to two 'Comparable' operands

<运算符适用于符合Comparable的单一类型的两个值,而不是仅仅指定为Comparable的两个值。协议本身不符合。

对MyElement使用any并不影响关于可比较约束的泛型占位符T的基本事实,因为MyElement在T上是泛型的,我们必须知道您建议排序的两个不同的符合MyElement的对象将它们的T解析为彼此相同的类型-而在您编写的代码中,我们不知道这一点,因此编译器会受阻。

相关内容

  • 没有找到相关文章

最新更新