tableView
のメニューを作成する途中で、最終的にユーザーが特定のパラメータを入力して結果を出力しています。すぐにUITableViewに複製リーフを持つツリー構造
このメニューはいくつかのページで構成され、ユーザーが選択した内容に応じて、さまざまなユーザー入力を行います。 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
メンバーをさらに作成するだけで簡単に解決できますが、問題を解決する他の方法はありますか?
ご提案は大歓迎です!
ありがとうございます!
モジュールには列挙型を使用していますか? – ScottyBlades
はい私はそうです。モジュールは列挙型です –
"私の葉ノードが異なる親を持つように私のコードをどのように変更する必要がありますか?"同じ親を持つ唯一のノードはnode2とnode3です。 node2とnode3が親を共有しないようにしますか?なぜこれが欲しくないのですか? – ScottyBlades