Clicky

iOS Dev Nugget 276 Adding an Indent Default Parameter When Logging Calls in Object Hierarchies

.

Need to run a code review on your codebase? Hire me

As a printf debugger, I have a little trick I like to use when logging hierarchy function calls. For example:

struct Node {
    var name: String
    var children = [Node]()

    init(_ name: String) {
        self.name = name
    }
    mutating func addChild(child: Node) {
        children.append(child)
    }
    func printHierarchy() {
        print("\(name)")
        for each in children {
            each.printHierarchy()
        }
    }
}

var root = Node("Topmost")
var n1 = Node("n1")
var n2 = Node("n2")
var n3 = Node("n3")
var n4 = Node("n4")
n3.addChild(child: n4)
n2.addChild(child: n3)
root.addChild(child: n1)
root.addChild(child: n2)

root.printHierarchy()

This prints:

Topmost
n1
n2
n3
n4

which isn't that useful. But if we modify printHierarchy() to add an indent argument with a default value of 0:

func printHierarchy(indent: Int=0) {
    print("\(String(repeating: "  ", count: indent))\(name)")
    for each in children {
        each.printHierarchy(indent: indent + 1)
    }
}

Our output becomes:

Topmost
  n1
  n2
    n3
      n4

This is especially useful when we are logging more information in each node to debug method calls up and down the hierarchy.

Your feedback is valuable: Do you want more nuggets like this?   Yes   or   No

.

.

Like this and want such iOS dev nuggets to be emailed to you, weekly?

Sign Me Up! or follow @iosdevnuggets on Twitter

.

View archives of past issues