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

求助:实现将[Document]数组追加到指定父Folder的函数

解决文档数组追加到父文件夹的问题

首先,你的代码核心问题是Folder类的children属性是不可变的(用let修饰),而且是可选类型,没法直接追加元素。先调整Folder的定义,把children改成可变的非可选数组(如果允许空目录的话,初始化为空数组更合理):

enum Document {
    case file(File)
    case folder(Folder)
}

class Folder {
    let id: Int
    let name: String
    let parentId: Int?
    // 改成可变的非可选数组,初始化为空
    var children: [Document]
    
    init(id: Int, name: String, parentId: Int?, children: [Document] = []) {
        self.id = id
        self.name = name
        self.parentId = parentId
        self.children = children
    }
}

class File {
    let id: Int
    let name: String
    let parentId: Int?
    
    init(id: Int, name: String, parentId: Int?) {
        self.id = id
        self.name = name
        self.parentId = parentId
    }
}

接下来实现append函数,直接把传入的children数组追加到父文件夹的children里即可:

func append(_ children: [Document], to parent: Folder) {
    parent.children.append(contentsOf: children)
}

补充说明

如果确实需要保留children的可选性(比如某些场景下文件夹没有子节点时为nil),可以改成var children: [Document]?,但append时需要先判断是否为nil,为空则初始化,再追加:

func append(_ children: [Document], to parent: Folder) {
    if parent.children == nil {
        parent.children = children
    } else {
        parent.children?.append(contentsOf: children)
    }
}

不过这种写法不如直接用非可选空数组直观,推荐优先使用第一种方案。

内容的提问来源于stack exchange,提问作者Dot Freelancer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 23:25:20