嵌套的Swift类不能符合Comparable

时间:2014-08-14 07:19:26

标签: 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 }

1 个答案:

答案 0 :(得分:1)

它抱怨因为Node类不符合Comparable协议。

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协议。这是样本:

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
}