swift - 嵌套的 Swift 类不符合 Comparable

标签 swift nested

我正在尝试实现一个简单的基于数组的堆,但遇到了嵌套 Node 类的问题。我希望我的节点具有可比性,但是,编译器提示节点类不符合。

导入基金会

class Heap<E:Comparable> {

var heap = Array<Node<E>>()

init() { }

class Node<E:Comparable >:Comparable {

    var key:E!

    init(key:E) { self.key = key }
}

func < <E> (lhs:Heap<E>.Node<E>, rhs:Heap<E>.Node<E>) -> Bool { return lhs.key < rhs.key }

func == <E> (lhs:Heap<E>.Node<E>, rhs:Heap<E>.Node<E>) -> Bool { return lhs.key == rhs.key }

最佳答案

它提示是因为 Node 类不符合 Comparable 协议(protocol)。

protocol Comparable : _Comparable, Equatable {
    func <=(lhs: Self, rhs: Self) -> Bool
    func >=(lhs: Self, rhs: Self) -> Bool
    func >(lhs: Self, rhs: Self) -> Bool
}

还有一件事,如果你想使用self.key 进行比较,那么类型也应该符合Comparable 协议(protocol)。这是示例:

class Node<E where E:Comparable>:Comparable {

    var key:E!

    init(key:E) { self.key = key }

}
func ==<E>(lhs: Node<E>, rhs: Node<E>) -> Bool {
    return lhs.key == rhs.key
}
func <<E>(lhs: Node<E>, rhs: Node<E>) -> Bool {
    return lhs.key < rhs.key
}

关于swift - 嵌套的 Swift 类不符合 Comparable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25302218/

相关文章:

ios - CloudKit CKdatabaseOperation 不会根据 .qualityOfService 设置在模拟器中抛出错误

swift - UIViewController.topLayoutGuide 的用途是什么?

ios - SKPhysicsBody 的 .dynamic 属性

MySQL - 嵌套选择中的引用主查询(需要嵌套)

php - 嵌套的可排序 JQuery 列表在 IE 中不起作用,而在 FF 中起作用

ios - 为什么当 TableView 在其下方滚动时,UIToolBar 会变成透明/半透明

swift - 从 Firebase 数据库检索数据时,返回 <null> : "Snap (...) <null>"

python - 为每个子列表的第一个元素赋值的更简单方法?

php - 什么是嵌套模型?它与 Joomla 的菜单项有什么关系?

python - 以表格格式打印嵌套字典键和值