I use Swift 2 and Xcode 7.
I would like to know the difference between
if condition { ... } else { ... }
and
guard ... else ...
I use Swift 2 and Xcode 7.
I would like to know the difference between
if condition { ... } else { ... }
and
guard ... else ...
The really big difference is when you are doing an optional binding:
if let x = xOptional {
if let y = yOptional {
// ... and now x and y are in scope, _nested_
}
}
Contrast this:
guard let x = xOptional else {return}
guard let y = yOptional else {return}
// ... and now x and y are in scope _at top level_
For this reason, I often have a succession of multiple guard
statements before I get to the meat of the routine.
Like an if
statement, guard
executes statements based on a Boolean
value of an expression. Unlike an if
statement, guard
statements only run if the conditions are not met. You can think of guard more like an Assert
, but rather than crashing, you can gracefully exit.
Reference and code example here.
To add to Matt's answer, you can include several conditions in a single guard statement:
guard let x = xOptional, y = yOptional else { return }
// ... and now x and y are in scope _at top level_
In addition to optional binding, a guard condition can test boolean results:
guard x > 0 else { return }
In short, the benefit of the guard statement is to make the early exit apparent at the start of the scope, instead of the condition being buried further down in a nested else statement.