web-dev-qa-db-fra.com

Swift 2: le corps de garde ne doit pas tomber en erreur

J'ai l'extrait de garde suivant, qui génère l'erreur «Le corps de garde ne peut pas tomber à travers». Qu'est-ce qui ne va pas?

 guard NSFileManager.defaultManager().fileExistsAtPath(appBundlePath) else {
        print("App bundle doesnt exist")
 }
27
james_alvarez

L’instruction guard doit avoir un élément permettant d’éloigner le flux du programme de la portée englobante (par exemple, le cas le plus probable est que return renvoie la fonction). Cela est nécessaire car la condition de garde n'est pas valide, le flux du programme doit donc aller ailleurs!

Documentation :

La clause else d'une instruction guard est obligatoire et doit être appelée une fonction marquée avec l'attribut noreturn ou le programme de transfert contrôle en dehors de la portée englobante de la déclaration de garde en utilisant l’un des fichiers les déclarations suivantes:

  • revenir 
  • pause 
  • continuer 
  • jeter
48
james_alvarez

Pensez à utiliser une instruction return

Une instruction return apparaît dans le corps d'une définition de fonction ou de méthode et entraîne le retour de l'exécution du programme à la fonction ou à la méthode appelante. 

1
Cons Bulaquena

Voici l'exemple de ce qui a été expliqué dans les réponses ci-dessus pour le rendre plus clair.

déclaration de garde dans le cadre plus externe du programme.

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

ce code s produit cette déclaration d'erreur 

error: If guard statement.playground: 1: 1: erreur: le corps 'guard' ne peut pas échouez, envisagez d'utiliser un 'retour' ou un 'lancer' pour sortir du scope

Le message d'erreur dans Word simple signifie que vous devez transférer le contrôle de programme de l'instruction Guard à l'aide d'instructions return, break, continue ou throw.

avec déclaration de contrôle de transfert de retour

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

sortie en console 

Condition remplie

0
rizwan