J'ai une structure, qui est mon modèle de données:
import Foundation
struct Item : Codable {
var cat:String
var name:String
var createdAt:Date
// more
var itemIdentifier:UUID
var completed:Bool
func saveItem() {
DataManager.save(self, with: itemIdentifier.uuidString)
}
func deleteItem() { DataManager.delete(itemIdentifier.uuidString)
}
mutating func markAsCompleted() {
self.completed = true
DataManager.save(self, with: itemIdentifier.uuidString)
}
}
Ensuite, dans mon ViewController, j'ai le code suivant pour charger les données, qui vont dans une TableView (triées par date de création).
func loadData() {
items = [Item]()
items = DataManager.loadAll(Item.self).sorted(by: {
$0.createdAt < $1.createdAt })
tableView.reloadData()
}
Maintenant, je voudrais ajouter un filtre, de sorte que seule la catégorie entre dans la TableView. Par exemple, uniquement lorsque chat est égal à "jardin".
Comment puis-je ajouter ça?
Utilisez filtré.
Voici un exemple de votre array
non filtrée:
var unfilteredItems = ...
Voici un code de filtrage:
var filteredItems = unfilteredItems.filter { $0.cat == "garden" }
Voici le code:
func loadData() {
items = [Item]()
items = DataManager.loadAll(Item.self).sorted(by: {
$0.createdAt < $1.createdAt }).filter { $0.cat == "garden"}
tableView.reloadData()
}
alternativement avec Swift 4.2 en utilisant allSatisfy
var filteredItems = unfilteredItems.allSatisfy { $0.cat == "garden" }