A type-safe Core Data query API using Swift 4's Smart KeyPaths
Swift Ruby Objective-C
Switch branches/tags
Nothing to show
Latest commit 1a0e4e5 Jun 16, 2017 @kishikawakatsumi Update README.md
Permalink
Failed to load latest commit information.
Configurations Initial commit Jun 14, 2017
Kuery.xcodeproj Initial commit Jun 14, 2017
Sources/Kuery Initial commit Jun 14, 2017
Tests/KueryTests Initial commit Jun 14, 2017
.gitignore Initial commit Jun 14, 2017
.swift-version Initial commit Jun 14, 2017
Kuery.podspec Initial commit Jun 14, 2017
LICENSE Initial commit Jun 14, 2017
Package.swift Initial commit Jun 14, 2017
README.md Update README.md Jun 16, 2017

README.md

Kuery

Build Status Carthage compatible Version Platform

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.

Requirements

Kuery is written in Swift 4.

Installation

CocoaPods

Kuery is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod 'Kuery'

Carthage

For Carthage, add the following to your Cartfile:

github "kishikawakatsumi/Kuery"

Description

Kuery provides type safety, code completion and avoidance of typos against NSPredicate queries.

Before

NSPredicate(format: "name == %@", "Katsumi")
NSPredicate(format: "age > %@", 20)

After

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 error

Usage

context.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()
}

Feature request for Swift Standard Library

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