Ich versuche, eine Suchleiste für eine TableView zu implementieren, und ich erhalte den Fehler "... Binary Operator '==' kann nicht auf Operanden vom Typ 'Place' und 'String'" in meinem TextDidChange angewendet werden Methode. Die TabelleView wird aus einem "placeList" -Array der Firebase-Datenbank gefüllt. Nicht sicher, woher die Fehlerquelle kommt. Vielen Dank im Voraus für jede Hilfe!searchbar textDidChange Fehler
lazy var searchBar:UISearchBar = UISearchBar()
var placeList = [Place]()
var placesDictionary = [String: Place]()
var isSearching = false
var filteredData = [Place]()
override func viewDidLoad() {
super.viewDidLoad()
searchBar.searchBarStyle = UISearchBarStyle.prominent
searchBar.placeholder = " Search Places..."
searchBar.sizeToFit()
searchBar.isTranslucent = false
searchBar.backgroundImage = UIImage()
searchBar.delegate = self
searchBar.returnKeyType = UIReturnKeyType.done
navigationItem.titleView = searchBar
tableView.allowsMultipleSelectionDuringEditing = true
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: .subtitle, reuseIdentifier: cellId)
if isSearching {
cell.textLabel?.text = filteredData[indexPath.row].place
} else {
cell.textLabel?.text = placeList[indexPath.row].place
}
return cell
}
func SearchBar (_ SearchBar: UISearchBar, textDidChange search: String) {
if searchBar.text == nil || searchBar.text == "" {
isSearching = false
view.endEditing(true)
tableView.reloadData()
} else {
isSearching = true
// error in below line of code...
filteredData = placeList.filter({$0.place == searchBar.text})
tableView.reloadData()
}
}
Dank, die Sinn macht ... Ich habe ein Modell „Place“ NSObject mit String Value „Ort“ zu tun, und meine Feuerbasis Datenmodell hat einen Abkömmling-Wert-Titel " platzieren "auch. Also habe ich filteredData = placeList.filter ({$ 0.place == searchBar.text}) aktualisiert, aber immer noch kein Glück ...? Es stürzt nicht ab oder gibt mir einen Fehler, wenn ich die Anwendung ausführe - aber gibt gefilterte Ergebnisse nicht an searchBar textChange zurück. – user3708224
@ user3708224 - so wie der Code geschrieben wird, wird er nur Objekte filtern, wo die 'place' Zeichenkette genau mit Ihrer' searchBar.text' übereinstimmt. Sie könnten versuchen, beide Strings in Kleinbuchstaben zu schreiben, um jegliche Art von Groß- und Kleinschreibung zu vermeiden. Sie könnten dies versuchen: 'placeList.filter ({$ 0.place.lowercased() == searchBar.text.lowercased()})'. Wenn das immer noch nicht funktioniert, würde es mich glauben machen, dass keines deiner 'Place'-Objekte in Firebase eine' place'-Zeichenfolge hat, die deinem Suchtext entspricht. – Pierce
@ user3708224- Auch wenn Sie nur nach 'place'-Strings filtern möchten, die nur den Text in Ihrer Suche enthalten (aber nicht genau gleich), können Sie die 'contains'-Funktion für Swifts String-API verwenden, die aussehen würde etwa so: 'placeList.filter ({$ 0.place.lowercased(). contains (searchBar.text.lowercased())})' – Pierce