Ich möchte ein Wörterbuch der Übungen für den Namenschlüssel suchen und dann das gefilterte Ergebnis in der Tabellenansicht anzeigen. Ich benutze diese FunktionArray filtern und in der Tabellenansicht anzeigen?
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
let filtered = exercises.filter { $0["name"] == searchText }
print(filtered)
if(filtered.count == 0){
searchActive = false;
} else {
searchActive = true;
}
self.exercisesTableView.reloadData()
}
Variablen:
var exercises = [Exercise]()
var filtered: [NSMutableArray] = []
var searchActive: Bool = false
In der Suchfunktion ich den Fehler
Type'Exercise erhalten‘hat keine Index Mitglieder
und Dann habe ich das Problem, dass das Ergebnis ein NSMutableArray ist und daher kann ich das resul nicht setzen t Namen als Zelltext anzuzeigen
Wert kann nicht vom Typ 'NSMutableArray' konvertieren 'String' in Zwang zu geben
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
if (searchActive){
cell.textLabel?.text = filtered[indexPath.row] as String
} else {
let exercise = exercises[indexPath.row]
cell.textLabel!.text = exercise.name
}
return cell
}
Hier ist meine Übung Wörterbuch als Referenz:
final public class Exercise {
var id: Int
var descrip: String
var name: String
var muscles: [Int]
var equipment: [Int]
public init?(dictionary: [String: Any]) {
guard
let id = dictionary["id"] as? Int,
let descrip = dictionary["description"] as? String,
let name = dictionary["name"] as? String,
let muscles = dictionary["muscles"] as? [Int],
let equipment = dictionary["equipment"] as? [Int]
else { return nil }
self.id = id
self.descrip = descrip
self.name = name
self.muscles = muscles
self.equipment = equipment
}
Ich kann den zweiten Fehler beheben, indem ich var filtered: [String] = [] so kann es als eine Zelle Titel verwendet werden, aber das löst nicht den ersten Fehler und ich bin nicht sicher, ist der richtige Weg, um darüber zu gehen ?
Vielen Dank für diese, aber wenn ich auch gefilterte Menge an = [Übung]() Wie soll ich gemeint Ordnen Sie es dem Zellennamen zu, wenn es kein String mehr ist? Siehe den Teil meines Codes cell.textLabel? .text = gefiltert [indexPath.row] als String – infernouk
@infernouk Überprüfen Sie die bearbeitete Antwort :) –
Ich habe es versucht und es mag es nicht, muss ich auch die Variable bearbeiten oder einfach den angegebenen Code eingeben? Fehler sind: Wert des Typs 'String' kann nicht in den Closure-Ergebnistyp 'Übung' und in die Tabellenzellen-Namensanweisung konvertiert werden: Wert des Typs 'Übung' kann nicht in den Datentyp 'String' konvertiert werden – infernouk