Swift中如何实现支持Node子类的更高泛型性双向链表
针对双向链表(DoublyLinkedList)的泛型构造Node节点实现如下:
public class Node<T> { var value: T var next: Node<T>? weak var previous: Node<T>? init(value: T) { self.value = value } } public class DoublyLinkedList<T> { var head: Node<T>? private var tail: Node<T>? public func append(value: T) { let newNode = Node(value: value) if let tailNode = tail { newNode.previous = tailNode tailNode.next = newNode } else { head = newNode } tail = newNode } // 其余方法实现省略 }
如何让
DoublyLinkedList具备更高的泛型性? 问题场景
开发中可通过继承Node实现子类的方式编写特定业务逻辑,但当前DoublyLinkedList仅匹配具体的Node基类类型,无法支持子类实例的使用。
自定义的Node子类代码如下:
class TransactionFilterNode: Node<Search> { let seedTransactions: [Transaction] init(search: Search, allTransactions: [Transaction]){ self.seedTransactions = allTransactions super.init(value: search) } }
当前实现的问题:无法将该子类的实例插入或追加到DoublyLinkedList中,因为链表的内置方法仅接受/内部创建Node基类类型,不支持传入Node的子类。
补充:已找到解决方向
解决方案为将Node的创建逻辑抽离为函数入参,即可支持传入子类版本的Node实例,具体实现见后续内容。
内容的提问来源于stack exchange,提问作者bobbydp
相关产品推荐
相关产品推荐

