The point of using closure expressions is to clearly express a succinct bit of logic. Start nesting closure expressions too deeply and you create a
logic snarl that will likely snare both you and future maintainers.
Noncompliant code example
With the maximum depth of 2:
foo(42) { (x: Int) in
bar(x) { (x: Int) in
foobar(x) { // Noncompliant
print(x * 42)
}
print(x + 42)
}
print(x - 42)
}
Compliant solution
func multPlus(x:Int) {
foobar(x) {
print(x * 42)
}
print(x + 42)
}
foo(42) { (x: Int) in
bar(x, multPlus)
print(x - 42)
}