2015-11-30 1 views
-4

J'utilise Swift 2 et Xcode 7.opération Garde Swift 2

Je voudrais savoir la différence entre

if condition { ... } else { ... } 

et

guard ... else ... 
+2

Copie possible de [Mot-clé garde Swift 2] (http://stackoverflow.com/q/30791488/4151918) –

Répondre

4

La très grande différence est quand vous faites une liaison en option:

if let x = xOptional { 
    if let y = yOptional { 
     // ... and now x and y are in scope, _nested_ 
    } 
} 

Contraste ceci:

guard let x = xOptional else {return} 
guard let y = yOptional else {return} 
// ... and now x and y are in scope _at top level_ 

Pour cette raison, j'ai souvent une succession de plusieurs guard déclarations avant que je à la viande de la routine.

+0

Et voir mon livre pour plus de discussion: http://www.apeth.com/swiftBook/ch05. html # SECguard – matt

+0

Voici un exemple de code pratique: https://github.com/mattneub/Programming-iOS-Book-Examples/blob/80551757899141e786b7f601f3879a7b450923c2/bk2ch02p070filters2/ch15p419filters/MyVignetteFilter.swift – matt

+0

Et un autre (mon code est plein de ce genre de chose): https://github.com/mattneub/Programming-iOS-Book-Examples/blob/80551757899141e786b7f601f3879a7b450923c2/bk2ch14p653backgroundPlayerAndInterrupter/interrupter/interrupter/AppDelegate.swift – matt

2

Comme une déclaration if, guard exécute des instructions basé sur une valeur Boolean d'une expression. Contrairement à une instruction if, les instructions guard s'exécutent uniquement si les conditions ne sont pas remplies. Vous pouvez penser à la garde plus comme un Assert, mais au lieu de s'écraser, vous pouvez quitter gracieusement.

Référence et exemple de code here.

0

Pour ajouter à Matt's answer, vous pouvez inclure plusieurs conditions dans une seule instruction de garde:

guard let x = xOptional, y = yOptional else { return } 
// ... and now x and y are in scope _at top level_ 

Outre option de liaison, une condition de garde peut tester les résultats booléens:

guard x > 0 else { return } 

En bref , l'avantage de l'instruction guard est de faire apparaître la sortie anticipée au début de la portée, au lieu que la condition soit enterrée plus bas dans une instruction else imbriquée.