2015-06-30 5 views
27

Ich habe das folgende Schutz-Snippet, das den Fehler erzeugt 'Schutzgehäuse darf nicht durchfallen'. Was ist los mit dir?Swift 2: Schutzgehäuse kann nicht durch Fehler fallen

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

Vielleicht möchten Sie einen Kommentar für den Downvote hinterlassen? Es ist offensichtlich ein paar Leuten diese Antwort geholfen ... –

Antwort

48

Die guard Anweisung benötigt ein etwas haben, um den Fluss des Programms vom umschließenden Umfang zu übernehmen (z wahrscheinlichste Fall ist return aus der Funktion zurück). Dies ist erforderlich, da die Bedingung, dass der Schutz bewacht wird, nicht gültig ist. Der Programmablauf muss also woanders hin gehen!

Documentation:

Die else-Klausel einer Schutzerklärung erforderlich ist, und entweder eine Funktion markiert mit dem noreturn Attribut oder Transferprogramm Kontrolle außerhalb der umschließenden Umfang des Wächters Anweisung eines der nennen müssen folgende Aussagen:

  • Rückkehr
  • Pause
  • weiter
  • throw
0

Betrachten wir eine return Aussage

Eine return-Anweisung tritt in den Körper einer Funktion oder Methode Definition und bewirkt, dass die Programmausführung an die aufrufende Funktion oder Methode zurückzukehren.