web-dev-qa-db-fra.com

Comment comparer une valeur à plusieurs valeurs - Swift

Disons que vous avez le code

if stringValue == "ab" || stringValue == "bc" || stringValue == "cd" {
    // do something
}

Existe-t-il un moyen de raccourcir cette condition ou de l’embellir (de préférence sans utiliser l’instruction switch)? Je sais que ce code ne fonctionne pas:

if stringValue == ("ab" || "bc" || "cd") {
    // do something
}

J'ai déjà vu des solutions complexes sur d'autres langues, mais elles semblent spécifiques à une langue et ne sont pas applicables à Swift. Toute solution serait appréciée.

19
ICanCYou
let valuesArray = ["ab","bc","cd"]

valuesArray.contains(str) // -> Bool
22
Aaron

Pas que je sache, vous pouvez faire quelque chose comme ça,

let validStrings = Set<String>(arrayLiteral:"ab", "bc", "cd")
if validStrings.contains(str) {
    //do something      
}
6
Luke De Feo

Vous pouvez créer une extension comme ceci:

extension Equatable {
    func oneOf(other: Self...) -> Bool {
        return other.contains(self)
    }
}

et l'utiliser comme ça:

if stringValue.oneOf("ab", "bc", "cd") { ... }

Crédit pour l'impl qui m'a sauvé la frappe: https://Gist.github.com/daehn/73b6a08b062c81d8c74467c131f78b55/

6
Pat Niemeyer
if someArray.contains(object) {
  // contains
 } else {
  // does not contains
  }

Ici, la fonction ci-dessus renvoie la valeur booléenne, puis vous écrivez la logique en conséquence.

0
Narendra G

Si vous voulez vérifier si une String contient plusieurs valeurs, vous pouvez définir une extension comme:

extension String: {
 func containsStrings(other: [String]) -> Bool {
     for string in other {
         if self.containsString(string) {
             return true
         }
     }
     return false
 }
}

Et pour l'utiliser:

let stringValue = "Apple"

if stringValue.containsStrings(["ab", "bc", "le"]) {
 //Do something
}
0
Tal Zion
let a = 1
let b = 1
let c = 1
let d = 1
if a == b,a==c,a==d  {
    print("all of them are equal")
}
else {
    print("not equal")
}
0
Ankit Kushwah