Comment comparer une valeur avec plusieurs valeurs-Swift
disons que vous avez le code
if stringValue == "ab" || stringValue == "bc" || stringValue == "cd" {
// do something
}
Est-il possible de raccourcir cette condition ou 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 vu des solutions complexes sur D'autres langues, mais elles semblent spécifiques à la langue et non applicables à Swift. Toute solution serait appréciée.
6 réponses
let valuesArray = ["ab","bc","cd"]
valuesArray.contains(str) // -> Bool
Pas que je sache, vous pouvez faire quelque chose comme cela,
let validStrings = Set<String>(arrayLiteral:"ab", "bc", "cd")
if validStrings.contains(str) {
//do something
}
Vous pouvez créer une extension comme ceci:
extension Equatable {
func oneOf(other: Self...) -> Bool {
return other.contains(self)
}
}
et l'utiliser comme ceci:
if stringValue.oneOf("ab", "bc", "cd") { ... }
Crédit pour l'impl qui m'a sauvé la tapant: https://gist.github.com/daehn/73b6a08b062c81d8c74467c131f78b55/
if someArray.contains(object) {
// contains
} else {
// does not contains
}
ici, la fonction ci-dessus renvoie la valeur bool,puis vous écrivez la logique en conséquence.
Si vous voulez tester si un String
contient un certain nombre de valeurs, vous pouvez définir un 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
}
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")
}