Convenient NSPredicate Initializers
February 22, 2024
There is a better way than to repeat the same or similar NSPredicate
all the time and it is very nice to read.
It actually is very simple but also hard to get as an idea, if you are caught up in routines.
Basically, it only is an extension to NSPredicate
which adds either static computed properties or methods to provide a new instance.
import Foundation
extension NSPredicate {
static var softlyDeletedItemsOnly: NSPredicate {
NSCompoundPredicate(orPredicateWithSubpredicates: [
NSPredicate(format: "deletedByServer != nil"),
NSPredicate(format: "deletedBySystem != nil"),
])
}
}
In later use it results in a very neat and concise code.
let request: NSFetchRequest = Item.fetchRequest()
request.predicate = .softlyDeletedItemsOnly
This is just a very basic example. I think it becomes more obvious in programmatic composition of more complex predicates.
Of course there are is the new predicate macro in SwiftData which is much better but as explained earlier, I have to stick (mainly) to CoreData in my current project, for now.