2015-07-09 6 views
16

Deklaration:prüfen, ob ein String besteht in einem Array Fall unsensibel

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

dann diese

contains(listArray, word) 

Gibt true zurück, aber wenn Erklärung:

let word = "Kashif" 

dann gibt es falsch, weil Beim Vergleich wird zwischen Groß- und Kleinschreibung unterschieden

Wie macht man diesen Vergleich case insensitive?

+0

Vielen Dank alle guten Antworten. Ein weiterer Schritt, den ich machen musste, war, zu meiner Quelltextdatei zu gehen und alles darin in Kleinbuchstaben umzuwandeln. – Kashif

Antwort

14

können Sie verwenden

word.lowercaseString 

die Zeichenfolge in der alle Kleinbuchstaben

6

Versuchen Sie, diese zu konvertieren:

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

Xcode 8 • Swift 3 oder höher

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

Mein Beispiel

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

Zur Überprüfung, ob ein String existiert in einem Array (Fall unsensibel) verwenden Sie bitte

listArray.localizedCaseInsensitiveContainsString(word) 

Dabei ist listArray der Name des Arrays und Wort ist Ihr gesuchter Text

Dieser Code in Swift 2.2

+1

Bitte bearbeiten Sie mit mehr Informationen.Code-only und "try this" Antworten werden abgeraten, da sie keine durchsuchbaren Inhalte enthalten und nicht erklären, warum jemand "das versuchen sollte". – abarisone

+0

http://stackoverflow.com/a/26175437/419348 'localizedCaseInsensitiveContainsString' scheint eine Methode in' NSString' zu sein. Aber ich mag es nicht die Methodensignatur. Vielleicht ist 'containsIgnoringCase' eine bessere Benennung. – AechoLiu

1

SWIFT 3.0 funktioniert:

Die Suche nach einem Groß- und Kleinschreibung String in einem String-Array ist cool und alles, aber wenn Sie eine nicht Index kann für bestimmte Situationen nicht cool sein.

Hier ist meine Lösung:

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"            
} 

Das ist besser als die anderen Antworten b/c Sie Index des Objekts in dem Array, so dass Sie das Objekt greifen und tun, was auch immer Sie bitte

:)
+1

Dies sollte die akzeptierte Antwort sein! –

-1

Swift 4

einfach alles (Abfragen und Ergebnisse) Groß- und Kleinschreibung machen.

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

enthält() sollte gleich() sein, hier. – eriksoe

+0

Kommt nur darauf an, wie die Suche funktionieren soll. Bei Suchanfragen bevorzuge ich contains. – sconewolf

Verwandte Themen