Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Swift error: guard body must not fall through

I have the following guard statement, which is producing an error. What's wrong?

guard NSFileManager.defaultManager().fileExistsAtPath(appBundlePath) else {     print("App bundle doesn't exist") } 

error: 'guard' body may not fall through

error: 'guard' body must not fall through, consider using a 'return' or 'throw' to exit the scope

like image 668
James Alvarez Avatar asked Jun 30 '15 12:06

James Alvarez


2 Answers

The guard statement needs to have a something to take the flow of the program away from the enclosing scope (e.g. most likely case is return to return from the function). This is required as the condition that guard is guarding will not be valid, so the program flow needs to go elsewhere!

Documentation:

The else clause of a guard statement is required, and must either call a function marked with the noreturn attribute or transfer program control outside the guard statement’s enclosing scope using one of the following statements:

  • return
  • break
  • continue
  • throw
like image 92
James Alvarez Avatar answered Sep 20 '22 16:09

James Alvarez


Here is the Example of what explained in above answers to make it more clear.

guard statement in more outer scope of programme.

guard false else {     print("Condition is not true ") } print("Condition met") 

this code s produces this error statement

error: If guard statement.playground:1:1: error: 'guard' body may not fall through, consider using a 'return' or 'throw' to exit the scope

The error message in simple word means, you need to transfer program control from the guard statement using return, break, continue or throw statements.

with return transfer control statement

guard false else {     print("Condition is not true")     return } print("Condition met") 

output in console

Condition met

like image 32
Rizwan Mehboob Avatar answered Sep 18 '22 16:09

Rizwan Mehboob