扩展关系可转换的集合

时间:2016-05-25 19:02:25

标签: swift generics protocols

我在swift中实现了一个链表 - 我还构建了一个堆栈和队列,它们都使用了引擎盖下的链表。我扩展了我的链表以符合关键字可转换协议,因此我可以在其上调用print(list)。扩展名包含在我的linkedlist.swift文件中,如下所示:

object_setClass(<an NSPopupButtonCell instance>,
                [<your subclass> class]);

如何在不重写协议扩展的情况下将此功能扩展到我的队列/堆栈?我的队列文件如下所示:

extension LinkedList: CustomStringConvertible {
    var description: String {
        var currentIndex: Int = 0
        var description: String = ""
        if var currentNode = self.head {
       // while currentNode != nil {
            for _ in 0...count-1 {
                //description += (String(currentNode.value) + " " )
                description += ("\"" + (String(currentNode.value)) + "\"" + " is at index: \(currentIndex)\n")
                if let nextNode = currentNode.next {
                currentNode = nextNode
                currentIndex += 1
            }
            }
        }
        return description
}
}

接下来是我选择实施的任何功能。在VC或其他地方调用print(newQueue)永远不会调用linkedList customstringconvertible扩展...不确定原因。我是否需要将linkedlist子类化为队列/堆栈?我来自Objc背景,不太关注协议和扩展。

1 个答案:

答案 0 :(得分:0)

Queue不是LinkedList的子类,因此它不会继承 description属性。你必须实现协议 对于那个班级,但当然你可以“转发”到 LinkedList的说明:

extension Queue: CustomStringConvertible {
    var description: String {
        return list.description
    }
}