2017-10-03 4 views
0

Neu bei swift und Programmierung im Allgemeinen. Ich habe diese searchBar-Funktion, die nach den eingegebenen und tableView-Inhalten sucht. Ich habe bemerkt, dass es nicht für Sonderzeichen funktioniert. Bsp .: Ich habe eine Tabelle, wo Hon's der Name des Textes ist. Wenn ich Hon in die Suchleiste eintippe, erscheinen Hon's in der Liste der TableView. Wenn ich aber Hon (mit dem Apostroph s) eintippe, listet das TableView alle Inhalte auf und es wird nicht richtig gesucht. Ich erwarte, dass nur Hon's erscheinen sollte. Wie behebe ich den unten stehenden Code?Suche mit Sonderzeichen

public func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) { 
    filteredData = all.filter({ (text) -> Bool in 
     let tmp: NSString = text as NSString 
     let range = tmp.range(of: searchText, options: .caseInsensitive) 
     return range.location != NSNotFound 
    }) 
    if filteredData.count == 0 { 
     searchActive = false 
    } else { 
     searchActive = true 
    } 
    self.tableView.reloadData() 
} 
+0

Warum konvertieren Sie in NSString? Bereich (von: String) erwartet einen String und 'return range! = nil' –

+1

btw Sie können Ihre Bedingung zu einer einzelnen Zeile vereinfachen' searchActive =! filteredData.isEmpty' –

+0

und Ihre filteredData können vereinfacht werden als 'filteredata = all.filter {$ 0.range (von: searchText, Optionen: .caseInsensitive)! = Nil} 'oder benutze diese benutzerdefinierte Erweiterung https://Stackoverflow.com/a/41753828/2303865 –

Antwort

0

Try this:

let text = "Hon's Shop" 
let searchText = "Hon's"//works for "Hon" also 
let found = text.lowercased().contains(searchText.lowercased())//returns true 

So können Sie Ihren Filter ändern wie:

filteredData = all.filter({ (text) -> Bool in 
    return text.lowercased().contains(searchText.lowercased()) 
}) 

aktualisieren Wie Leo erwähnt, können Sie nur return-Anweisung ändern :

return range != nil 

Aber mit meinem Vorschlag können Sie Code verkürzen!

+0

Hallo D4ttatraya, danke für die Kommentare, aber es zeigt immer noch alle Ergebnisse, wenn ich Hon in die Suchleiste eintippe. –

Verwandte Themen