1
votes

Tests de cas de garde de chaîne avec expression booléenne

J'essaie de faire une déclaration «booléenne ou» de cas de garde mais je ne suis pas sûr de la syntaxe correcte.

guard case test = FooBar.foo || case test = FooBar.bar else {
  return
}

Je voudrais tester le test étant bar code> également, la syntaxe suivante est incorrecte:

enum FooBar {
  case foo
  case bar
  case nope
}

let test = FooBar.foo

guard case test = FooBar.foo else {
  return
}


0 commentaires

4 Réponses :


1
votes

Vous pouvez utiliser ceci à la place:

guard [FooBar.foo, FooBar.bar].contains(test) else {
    return
}


0 commentaires

1
votes

Vous pouvez utiliser contains:

guard [FooBar.foo, FooBar.bar].contains(test) else { return }


0 commentaires

1
votes

Vous n'avez besoin du mot-clé case pour rien. Vérifiez simplement si enum est égal au cas donné

guard test == .foo || test == .bar else {
    return
}


1 commentaires

J'ai perdu la trace de ce que j'allais faire avec mon problème spécifique. Pourquoi le moyen le plus simple quand il est possible de le faire durement ...



2
votes

Il n'est pas nécessaire d'utiliser un cas de garde , puisque vous n'utilisez pas de correspondance de modèle complexe, vous testez simplement l'égalité.

Vous pouvez simplement mettre toutes les enum cas dans un tableau et appel contient là-dessus.

guard [FooBar.foo, FooBar.bar].contains(test) else {
    return
}


1 commentaires

Je préfère cela au collage d'expressions avec des OR ( || ). Il est plus facile d'ajouter / supprimer des éléments et de mieux évoluer lorsque vous devez vérifier plus de choses