提问人:Morpheu5 提问时间:12/9/2022 更新时间:12/9/2022 访问量:30
在 Swift 中,我可以使用光标/指针来导航具有多种类型子项的 n 元链接树吗?
Can I use a cursor/pointer to navigate an n-ary linked tree with children of multiple types in Swift?
问:
我在 Swift 中工作,我有以下代码(请耐心等待):
class Node {
var parent: Node? = nil
var name: String = ""
private var _size: Int = 0
var size: Int { get { return _size } }
init(name: String, size: Int = 0) {
self.name = name
self._size = size
}
}
class Directory: Node {
private var _children: [Node] = []
var children: [Node] {
get { return _children }
set(children) {
_children = children
for child in _children {
child.parent = self
}
}
}
override var size: Int {
get { return children.map { $0.size }.reduce(0, +) }
}
func append(node: Node) {
_children.append(node)
node.parent = self
}
func remove(name: String) {
if let i = _children.firstIndex(where: { $0.name == name }) {
_children[i].parent = nil
_children.remove(at: i)
}
}
func remove(node: Node) {
self.remove(name: node.name)
}
func findBy(name: String) -> Node? {
if let i = _children.firstIndex(where: { $0.name == name }) {
return _children[i]
} else {
return nil
}
}
}
class File: Node {}
因此,它对一棵树进行了建模,其中包含一个可以是 s 或 s 的 s 数组,该数组在构建它时与预期一样工作。以有状态的方式导航它有点棘手。Directory: Node
Node
File
Directory
通常,在我以前的 C/C++ 生活中,我会有一个用来做类似的事情,这不是最漂亮的解决方案,但它对我的用例来说效果很好,如果“myFancyName”确实是一个,我几乎可以根据我的用例保证。Directory *pwd
pwd = (Directory *)pwd->findBy("myFancyName")
Directory
所以我继续做了一个,但这意味着我不能做,因为该方法返回一个.所以我做了,但这迫使我四处走动,一直我需要从类中调用一个方法,这有点有效,但有点难看。var pwd: Directory?
pwd = pwd.findBy(name: "myFancyname")
Node?
pwd: Node?
(pwd as! Directory)
Directory
有没有更好的解决方案?
答: 暂无答案
评论
findBy