You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 23:42:09