If the condition in your guard
statement is not met, the else branch has to exit the current scope. return
can only be used inside functions, as the error message shows, but return
is not the only way to exit scope.
You can use throw
outside functions as well and if the guard
statement is in a loop, you can also use break
or continue
.
return
valid in functions:
func testGuard(){
guard 2+2 == 4 else {
print("The universe makes no sense")
return // this is mandatory!
}
print("We can continue with our daily lives")
}
throw
valid outside of function as well:
guard 2+2 == 4 else { throw NSError() }
break
valid in loops:
for i in 1..<5 {
guard i < 5 else {
break
}
}
continue
valid in loops:
for someObject in someArray {
guard let someProperty = someObject.someOptionalProperty else {
continue
}
}