Ok… I came up with a way… inspired in part by what you posted
this was the input (1st is Parent, 2nd is Child, 3rd it “Text”)
self.add( "" ,"A","A")
self.add( "A","B","B")
self.add( "A","G","G")
self.add( "A","J","J")
self.add( "B","C","C")
self.add( "B","D","D")
self.add( "D","E","E")
self.add( "D","F","F")
self.add( "G","H","H")
self.add( "G","I","I")
updateDataStore()
private func updateDataStore() {
dataSTORE.removeAll()
if treeNODES.count>0 {
for i in(0...treeNODES.count-1) { treeNODES[i].level = -1 }
addBranch("",0)
}
}
private func addBranch(_ parent:String,_ lvl:Int) {
var didAdd : Int = 0
if treeNODES.count>0 {
for i in(0...treeNODES.count-1) {
if treeNODES[i].level<0 {
var newLevel : Int = -1
if treeNODES[i].parent == parent { newLevel=lvl }
if treeNODES[i].child == parent { newLevel=lvl+1 }
if newLevel>=0 {
treeNODES[i].level=newLevel
dataSTORE.append(treeNODES[i])
didAdd += 1
addBranch(treeNODES[i].child,newLevel+1)
}
}
}
if didAdd>0 { addBranch("",0) }
}
theTABLE.reloadData()
}
}
results were