求助:实现将[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
相关产品推荐
相关产品推荐

