web-dev-qa-db-fra.com

Ajout d'un filtre à un tableau dans Swift 4

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?

4
arakweker

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()
}
10
None

alternativement avec Swift 4.2 en utilisant allSatisfy

var filteredItems = unfilteredItems.allSatisfy { $0.cat == "garden" }
1
Alex Nolasco