QueryKit
QueryKit,一个简单的类型安全的 Core Data 查询语言。
使用方法
QuerySet<Person>(context, "Person")
.orderedBy(.name, ascending: true)
.filter(\.age >= 18)QuerySet
QuerySet 代表来自您的 Core Data 仓库的对象集合。它可能包含零个、一个或多个过滤器。过滤器根据提供的参数缩小查询结果。
获取所有对象
let queryset = QuerySet<Person>(context, "Person")使用过滤器获取特定对象
您可以使用 filter 和 exclude 方法来过滤 QuerySet,这两个方法可以接受一个谓词,可以使用 KeyPath 扩展来构建。
filter 和 exclude 方法返回包含过滤条件的新 QuerySet。
queryset.filter(\.name == "Kyle")
queryset.exclude(\.age > 25)如果您想要构建复杂的查询或不愿使用类型安全的属性,您也可以使用标准的 NSPredicate。
queryset.filter(NSPredicate(format: "name == '%@'", "Kyle"))
queryset.exclude(NSPredicate(format: "age > 25"))链式过滤
精炼 QuerySet 的结果仍然是一个 QuerySet,因此可以串联起来。例如:
queryset.filter(\.name == "Kyle")
.exclude(\.age < 25)每次您精炼一个 QuerySet 时,都会得到一个新的 QuerySet 实例,它与之前的 QuerySet 无关。每个精炼都会创建一个独立的、不同的 QuerySet,可以被存储、使用和重复使用。
QuerySet 是延迟加载的
QuerySet 是延迟加载的,创建 QuerySet 不会涉及查询 Core Data。QueryKit 不会在 QuerySet 被评估之前实际执行查询。
排序
您可以使用接受 KeyPath 的 orderBy 函数按顺序排列 QuerySet 的结果。
queryset.orderBy(\.name, ascending: true)如果您愿意,也可以传递一个 NSSortDescriptor。
queryset.orderBy(NSSortDescriptor(key: "name", ascending: true))切片
使用切片,可以将 QuerySet 的结果限制在指定的范围内。例如,要获取 QuerySet 中的前 5 个项目
queryset[0...5]注意:QuerySet 是延迟评估的。切片不会评估查询。
获取数据
多个对象
您可以使用 array() 函数将 QuerySet 转换为数组。例如
for person in try! queryset.array() {
println("Hello \(person.name).")
}第一个对象
let kyle = try? queryset.first()最后一个对象
let kyle = try? queryset.last()索引处的对象
let katie = try? queryset.object(3)计数
let numberOfPeople = try? queryset.count()删除
此方法立即删除您的查询集中的对象,并返回一个计数或错误(如果操作失败)。
let deleted = try? queryset.delete()运算符
QueryKit 提供了 KeyPath 扩展,提供了运算符函数,允许您创建谓词。
// Name is equal to Kyle
\Person.name == "Kyle"
// Name is either equal to Kyle or Katie
\.Person.name << ["Kyle", "Katie"]
// Age is equal to 27
\.Person.age == 27
// Age is more than or equal to 25
\Person.age >= 25
// Age is within the range 22 to 30.
\Person.age << (22...30)以下类型的使用 Attribute 进行动比较
| 比较 | 意义 |
|---|---|
| == | x 等于 y |
| != | x 不等于 y |
| < | x 小于 y |
| <= | x 小于或等于 y |
| > | x 大于 y |
| >= | x 大于或等于 y |
| ~= | x 类似于 y |
| ~= | x 类似于 y |
| << | x 在 y 中,其中 y 是一个数组 |
| << | x 在 y 的范围内,其中 y 是一个范围 |
谓词扩展
QueryKit 提供了用于联合多个谓词的 !、&& 和 || 操作符。
// Persons name is Kyle or Katie
\Person.name == "Kyle" || \Person.name == "Katie"
// Persons age is more than 25 and their name is Kyle
\Person.age >= 25 && \Person.name == "Kyle"
// Persons name is not Kyle
!(\Person.name == "Kyle")安装
CocoaPods 是将 QueryKit 添加到项目的推荐方式,您也可以使用 Carthage。
pod 'QueryKit'许可证
QueryKit 采用 BSD 许可证发布。请参阅 LICENSE。
