【发布时间】:2018-04-20 20:07:11
【问题描述】:
我正在创建一个带有tableView 的菜单,最终导致用户输入某个参数,然后输出结果。
菜单由多个页面组成,根据用户选择的内容,它会提供不同的用户输入。它与 iPhone 的设置非常相似。
现在,我对菜单建模的方式是使用树形结构:
class Node {
let value: Modules
var parentNode: Node?
var childenNode = [Node]()
var childCount: Int {
return childenNode.count
}
func appendNode(node: Node) {
childenNode.append(node)
node.parentNode = self
}
func isLeaveNode() -> Bool {
return childenNode.isEmpty
}
init(module: Modules) {
self.value = module
}
}
它是一种非常简单典型的树形数据结构。我的问题是,可能有重复的节点,这意味着父节点将被覆盖。例如,给定这样的结构:
[1]
/ \
[2] [3]
/ \
[4] [4]
如果我用我的代码对这棵树进行建模,它将如下所示:
let node1 = Node(.1)
let node2 = Node(.2)
let node3 = Node(.3)
let node4 = Node(.4)
node1.appendNode(node2)
node1.appendNode(node3)
node2.appendNode(node4)
node3.appendNode(node4)
由于节点 4 的外观是不是唯一的,因此 node4 的父节点将被覆盖,父节点现在是 node3。而node2 和node3 应该共享同一个叶子。我应该如何更改我的代码,以便任何给定的叶节点可以有多个父节点?
附加信息:Modules 是 enum。只需创建更多enum 成员即可轻松解决此问题,但是还有其他解决问题的方法吗?
欢迎提出任何建议!
谢谢!
【问题讨论】:
-
你在为模块使用枚举吗?
-
是的,我是。模块是枚举
-
您在问:“我应该如何更改我的代码,以便我的叶节点可以有不同的父节点?”但唯一具有相同父节点的节点是 node2 和 node3。您不希望 node2 和 node3 共享父节点吗?为什么不想要这个?
-
节点 4 需要有多个父节点。目前,节点 4 只能有一个父节点。我确实希望 node2 和 node3 具有相同的父级。我想要的是节点拥有多个父节点而不创建更多枚举案例。
-
如果我的回答不能解决您的问题,请告诉我。
标签: swift uitableview data-structures tree