Thanks to this post CompoundPredicate: A small library to combine Predicates - #2 by jmschonfeld
My attempt
func f1() {
let p1 = #Predicate<Car> { $0.name == "aaa" }
let p2 = #Predicate<Car> { $0.doors == 4 }
let predicates = [p1, p2] //could have more predicates
let truePredicate = #Predicate<Car> { _ in true }
let predicate = predicates.reduce(truePredicate) { result, current in
#Predicate<Car> {
result.evaluate($0) && current.evaluate($0)
}
}
}