2015-07-09 18 views
16

Dichiarazione:Verificare se una stringa esiste in un caso di serie insensitively

let listArray = ["kashif"] 
let word = "kashif" 

allora questo

contains(listArray, word) 

Restituisce vero, ma se la dichiarazione è:

let word = "Kashif" 

poi restituisce false perché il confronto è case sensitive.

Come rendere questa casella di confronto non sensibile?

+0

Grazie mille buone risposte. Un ulteriore passaggio che dovevo fare era andare sul mio file di testo sorgente e convertire anche tutto in minuscolo. – Kashif

risposta

14

è possibile utilizzare

word.lowercaseString 

per convertire la stringa a tutti i caratteri minuscoli

6

Prova questo:

let loword = word.lowercaseString 
let found = contains(listArray) { $0.lowercaseString == loword } 
24
let listArray = ["kashif"] 
let word = "Kashif" 

if contains(listArray, {$0.caseInsensitiveCompare(word) == NSComparisonResult.OrderedSame}) { 
    println(true) // true 
} 

Xcode 7.3.1 • Swift 2.2.1

if listArray.contains({$0.caseInsensitiveCompare(word) == .OrderedSame}) { 
    print(true) // true 
} 

Xcode 8 • Swift 3 o successivo

if listArray.contains(where: {$0.caseInsensitiveCompare(word) == .orderedSame}) { 
    print(true) // true 
} 
0

mio esempio

func updateSearchResultsForSearchController(searchController: UISearchController) { 
    guard let searchText = searchController.searchBar.text else { return } 
    let countries = Countries.getAllCountries() 
    filteredCountries = countries.filter() { 
     return $0.name.containsString(searchText) || $0.name.lowercaseString.containsString(searchText) 
    } 
    self.tableView.reloadData() 
} 
4

Per controllare se una stringa esiste in una matrice (caso insensibile), utilizza

listArray.localizedCaseInsensitiveContainsString(word) 

dove listArray è il nome dell'array e la parola è il testo cercato

Questo codice funziona a Swift 2.2

+1

Si prega di modificare con ulteriori informazioni.Le risposte solo per codice e "prova questo" sono scoraggiate, perché non contengono contenuti ricercabili e non spiegano perché qualcuno dovrebbe "provare questo". – abarisone

+0

http://stackoverflow.com/a/26175437/419348 'localizedCaseInsensitiveContainsString' sembra un metodo in' NSString'. Ma non mi piace che sia la firma del metodo. Forse 'containsIgnoringCase' è un nome migliore. – AechoLiu

1

SWIFT 3.0:

Trovare una stringa insensibile caso in un array di stringhe è fresco e tutto, ma se non si dispone di un indicizzare che non può essere bello per determinate situazioni.

Ecco la mia soluzione:

let stringArray = ["FOO", "bar"]() 
if let index = stringArray.index(where: {$0.caseInsensitiveCompare("foo") == .orderedSame}) { 
    print("STRING \(stringArray[index]) FOUND AT INDEX \(index)") 
    //prints "STRING FOO FOUND AT INDEX 0"            
} 

Questo è migliore rispetto alle altre risposte b/c avete indice dell'oggetto nella matrice, in modo da poter afferrare l'oggetto e fare quello che si prega :)

+1

Questa dovrebbe essere la risposta accettata! –

-1

Swift 4

Basta fare tutto (interrogazioni e risultati) case insensitive.

for item in listArray { 
    if item.lowercased().contains(word.lowercased()) { 
     searchResults.append(item) 
    } 
} 
+0

contains() dovrebbe essere uguale a(), qui. – eriksoe

+0

Dipende solo da come si desidera che la ricerca funzioni. Per le query di ricerca, preferisco contiene. – sconewolf