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()
}
Warum konvertieren Sie in NSString? Bereich (von: String) erwartet einen String und 'return range! = nil' –
btw Sie können Ihre Bedingung zu einer einzelnen Zeile vereinfachen' searchActive =! filteredData.isEmpty' –
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 –