Déclaration:
let listArray = ["kashif"]
let Word = "kashif"
ensuite ceci
contains(listArray, Word)
Renvoie true mais si déclaration est:
let Word = "Kashif"
alors, il retourne false car la comparaison est sensible à la casse.
Comment rendre cette comparaison insensible à la casse?
vous pouvez utiliser
Word.lowercaseString
convertir la chaîne en caractères minuscules
let list = ["kashif"]
let Word = "Kashif"
if contains(list, {$0.caseInsensitiveCompare(Word) == NSComparisonResult.OrderedSame}) {
println(true) // true
}
Xcode 7.3.1 • Swift 2.2.1
if list.contains({$0.caseInsensitiveCompare(Word) == .OrderedSame}) {
print(true) // true
}
Xcode 8 • Swift 3 ou version ultérieure
if list.contains(where: {$0.caseInsensitiveCompare(Word) == .orderedSame}) {
print(true) // true
}
alternativement:
if list.contains(where: {$0.compare(Word, options: .caseInsensitive) == .orderedSame}) {
print(true) // true
}
Pour vérifier si une chaîne existe dans un tableau (sans tenir compte de la casse), veuillez utiliser
listArray.localizedCaseInsensitiveContainsString(Word)
où listArray est le nom du tableau et Word est le texte recherché.
Ce code fonctionne dans Swift 2.2
Essaye ça:
let loword = Word.lowercaseString
let found = contains(listArray) { $0.lowercaseString == loword }
Swift 4
Rendez simplement tout (requêtes et résultats) insensible à la casse.
for item in listArray {
if item.lowercased().contains(Word.lowercased()) {
searchResults.append(item)
}
}
Swift 3.0:
Trouver une chaîne insensible à la casse dans un tableau de chaînes est cool et tout, mais si vous n'avez pas d'index, il ne peut pas être cool dans certaines situations.
Voici ma solution:
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"
}
C'est mieux que les autres réponses, car vous avez l'index de l'objet dans le tableau, vous pouvez donc saisir l'objet et faire ce que vous voulez :)
Pour vérifier si une chaîne existe dans un tableau avec plus de Options (caseInsensitive, anchored/search est limité au début)
range(of:options:)
let list = ["kashif"]
let Word = "Kashif"
if list.contains(where: {$0.range(of: Word, options: [.caseInsensitive, .anchored]) != nil}) {
print(true) // true
}
if let index = list.index(where: {$0.range(of: Word, options: [.caseInsensitive, .anchored]) != nil}) {
print("Found at index \(index)") // true
}
Mon exemple
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()
}