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 ...
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 ...
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.
Et voir mon livre pour plus de discussion: http://www.apeth.com/swiftBook/ch05. html # SECguard – matt
Voici un exemple de code pratique: https://github.com/mattneub/Programming-iOS-Book-Examples/blob/80551757899141e786b7f601f3879a7b450923c2/bk2ch02p070filters2/ch15p419filters/MyVignetteFilter.swift – matt
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
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.
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.
Copie possible de [Mot-clé garde Swift 2] (http://stackoverflow.com/q/30791488/4151918) –