2015-09-23 12 views
16

Diciamo che hai il codiceCome confrontare un valore con più valori - Swift

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

C'è un modo per accorciare questa condizione o abbellire (preferibilmente senza utilizzare l'istruzione switch)? So che questo codice non funziona:

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

Ho visto alcune soluzioni complesse in altre lingue, ma sembrano linguaggio specifico e non applicabile ai Swift. Qualsiasi soluzione sarebbe apprezzata.

risposta

5

Non che io sono a conoscenza, si può fare qualcosa di simile a questo, però,

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

veramente bello. Avevo davvero dimenticato questa funzione. Sono contento che tu me l'abbia ricordato. In realtà è bello che tu stia facendo un set solo per evitare la duplicazione :) buona giornata – Korpel

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

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

E puoi scrivere così: 'if [" ab "," bc "," cd " ] .contains (stringValue) {'. – vacawama

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

Qui sopra funzione restituisce il valore bool, allora si scrive la logica conseguenza.

2

È possibile creare un'estensione simile a questo:

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

e usarlo in questo modo:

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

di credito per l'impl che mi ha salvato digitandolo: https://gist.github.com/daehn/73b6a08b062c81d8c74467c131f78b55/

0

Se si desidera per verificare se uno String contiene un numero di valori, è possibile impostare un extension come:

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

E per usarlo:

let stringValue = "apple" 

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

Tutto in una dichiarazione:

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