Hi Everyone,
I thought I'd share a package that I wrote a few months ago. Compared to a lot of the packages shared here, this one is pretty simple, but it has proved quite useful in my projects.
Tree is a Swift package implementing a hierarchical tree structure constructed of interconnected nodes.
Each node has an associated value, which can be any identifiable type.
You can easily build a tree by describing the nodes in the tree. For example to create a tree of strings:
// Create a root node.
//
let root = Node("root")
// Create two nodes as children of the root node.
//
let A = root.append(child: "A")
let B = root.append(child: "B")
// Create some leaf nodes as children of node A.
//
let C = A.append(child: "C")
let D = A.append(child: "D")
You can also build the tree declaratively.
let root = Root("root") {
Branch("A") {
"C"
"D"
}
"B"
}
The tree can then be iterated either using depth first, or breadth first, manipulated to append/remove/prune nodes, and the node properties can be inspected.
// Test if a node is a root node (has no parent).
//
print(root.isRoot) // "true"
// Test if a node is a leaf node (has no children).
//
print(root.isLeaf) // "false"
// Lookup a child node by identifier.
//
if let A = root.node(identifiedBy: "A") {
// Get the parent for a node.
//
print(A.parent?.element) // "root"
// Iterate over the children.
//
print(A.reduce("") {
$0 + "\($1.element), "
})
// "C, D, "
// Append a new child to the node.
//
A.append(child: Node("E"))
}
This might be useful for others, but I thought I'd share here in case it was.
The full documentation is available here: Documentation
Hope it's useful to some folks.