Kuery, a type-safe Core Data query API using Swift 4's Smart KeyPaths. Inspired and borrowed a lot of things from QueryKit and RealmEx.
Kuery is written in Swift 4.
Kuery is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod 'Kuery'For Carthage, add the following to your Cartfile:
github "kishikawakatsumi/Kuery"
Kuery provides type safety, code completion and avoidance of typos against NSPredicate queries.
NSPredicate(format: "name == %@", "Katsumi")
NSPredicate(format: "age > %@", 20)Query(Person.self).filter(\Person.name == "Katsumi")
Query(Person.self).filter(\Person.age > 20)The following code should be a compile error.
Query(Person.self).filter(\Person.name > 20) // Compile error
Query(Person.self).filter(\Dog.name == "John") // Compile errorcontext.perform {
let results = try Query(Person.self)
.filter(\Person.name == "Katsumi")
.execute()
}context.perform {
let results = try Query(Person.self)
.filter(\Person.age == 36)
.execute()
}context.perform {
let results = try Query(Person.self)
.filter(\Person.age > 20)
.execute()
}context.perform {
let results = try Query(Person.self)
.filter(\Person.name == "Katsumi")
.filter(\Person.age == 36)
.execute()
}context.perform {
let results = try Query(Dog.self)
.filter(\Dog.owner == person)
.execute()
}It requires a string representation of KeyPath to construct NSPredicate from KeyPath. However, the API is not officially visible currently. The feature request is tracked at SR-5220.
[SR-5220] Expose API to retrieve string representation of KeyPath - Swift