QueryKit Logo

已弃用QueryKit CLI 已不再需要,QueryKit 0.14.0 可与 KeyPath 一起使用,请参阅 QueryKit/QueryKit#55

QueryKit CLI

一个命令行工具,用于为您的 Core Data 模型生成扩展,包括 QueryKit 属性,以实现类型安全的 Core Data 查询。 允许您将 Xcode 生成的托管对象类与 QueryKit 一起使用。

安装

可以通过 Homebrew 安装,如下所示

$ brew install querykit/formulae/querykit-cli

或者,您可以使用 Swift 包管理器自行构建。

$ git clone https://github.com/QueryKit/querykit-cli
$ cd querykit-cli
$ make install

用法

您可以针对您的模型运行 QueryKit,并提供用于保存扩展的目录。

$ querykit <modelfile> <directory-to-output>

示例

我们提供了一个使用 QueryKit CLI 工具的 示例应用程序

$ querykit Todo/Model.xcdatamodeld Todo/Model
-> Generated 'Task' 'Todo/Model/Task+QueryKit.swift'
-> Generated 'User' 'Todo/Model/User+QueryKit.swift'

QueryKit CLI 将为您的每个托管对象子类生成一个 QueryKit 扩展,您可以将其添加到 Xcode 中,在本例中为 TaskUser

这些扩展为您的模型提供了属性,用于类型安全的过滤和排序。

Task+QueryKit.swift

import QueryKit

extension Task {
  static var createdAt:Attribute<NSDate> { return Attribute("createdAt") }
  static var creator:Attribute<User> { return Attribute("creator") }
  static var name:Attribute<String> { return Attribute("name") }
  static var complete:Attribute<Bool> { return Attribute("complete") }
}

extension Attribute where AttributeType: Task {
  var creator:Attribute<User> { return attribute(AttributeType.creator) }
  var createdAt:Attribute<NSDate> { return attribute(AttributeType.createdAt) }
  var name:Attribute<String> { return attribute(AttributeType.name) }
  var complete:Attribute<Bool> { return attribute(AttributeType.complete) }
}

User+QueryKit.swift

import QueryKit

extension User {
  static var name:Attribute<String> { return Attribute("name") }
}

extension Attribute where AttributeType: User {
  var name:Attribute<String> { return attribute(AttributeType.name) }
}

我们可以将这些属性与 QueryKit 结合使用,以构建类型安全的查询。 例如,在这里我们查询由名为 Kyle 的用户创建的所有已完成的任务,并按其创建日期排序。

Task.queryset(context)
  .filter { $0.user.name == "Kyle" }
  .exclude { $0.completed == true }
  .orderBy { $0.createdAt.ascending }

自定义

您可以将自定义模板传递给 QueryKit 工具,有关语法的更多信息,请参阅标准模板。

$ querykit Todo/Model.xcdatamodeld Todo/Model --template share/querykit/template.swift