The filter method is a really powerful tool for filtering by single or multiple conditions, but is there a way to filter by conditions of arrays?
class
Treat the filter closures like a value type and store them in an array. Use the inner reduce call to create a single boolean value that is true is all of the conditions are met by the current car. If you need a compound test like color == "blue" or "green" then simply add that to your filter closure conditions array.
struct Car {
let model: String
let color: String
}
let conditions: [(Car) -> Bool] = [
{$0.model == "Opel"},
{$0.color == "Red"},
]
let carLot = [
Car(model: "Opel", color: "Green"),
Car(model: "Mustang", color: "Gold"),
Car(model: "Opel", color: "Red"),
]
let allRedOpels = carLot.filter {
car in
conditions.reduce(true) { $0 && $1(car) }
}