QueryKit 0.14.1

QueryKit 0.14.1

测试已测试
Lang语言 SwiftSwift
许可证 BSD-2-Clause
发布上次发布2020年3月
SPM支持 SPM

Kyle Fuller 维护。



QueryKit 0.14.1

QueryKit Logo

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")

使用过滤器获取特定对象

您可以使用 filterexclude 方法来过滤 QuerySet,这两个方法可以接受一个谓词,可以使用 KeyPath 扩展来构建。

filterexclude 方法返回包含过滤条件的新 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