2015-09-23 11 views
16

Sagen wir, dass Sie den Code habenWie ein Wert gegen mehrere Werte vergleichen - Swift

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

Gibt es eine Möglichkeit, diese Bedingung zu kürzen oder zu verschönern (vorzugsweise ohne den Switch-Anweisung)? Ich weiß, dass dieser Code nicht funktioniert:

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

Ich habe auf anderen Sprachen einige komplexe Lösungen zu sehen, aber sie scheinen sprachspezifisch und nicht für Swift. Irgendwelche Lösungen würden geschätzt werden.

Antwort

5

Nicht, dass ich weiß, können Sie so etwas wie dies zwar tun,

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

wirklich schön. Ich hatte diese Funktion wirklich vergessen. Freut mich, dass du mich daran erinnerst. Es ist wirklich gut, dass du ein Set machst, nur um Doppelungen zu vermeiden :) hab einen schönen Tag – Korpel

15
let valuesArray = ["ab","bc","cd"] 

valuesArray.contains(str) // -> Bool 
+7

Und du kannst das so schreiben: 'if [" ab "," bc "," cd " ] .enthält (stringValue) {'. – vacawama

0
if someArray.contains(object) { 
    // contains 
} else { 
    // does not contains 
    } 

Hier oben Funktion gibt Wert Bool, dann schreiben Sie Logik entsprechend.

2

Sie können eine Erweiterung wie folgt erstellen:

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

und es wie folgt verwendet werden:

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

Kredit für den impl, die mich die Eingabe gespeichert: https://gist.github.com/daehn/73b6a08b062c81d8c74467c131f78b55/

0

Wenn Sie möchten, um zu testen, ob ein String eine Anzahl von Werten enthält, können Sie einen wie:

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

Und es zu verwenden:

let stringValue = "apple" 

if stringValue.containsStrings(["ab", "bc", "le"]) { 
//Do something 
} 
0

Alle in einer Erklärung:

if ["ab", "bc", "cd"].contains(stringValue) { 
    // do something 
} 
Verwandte Themen