Ches 0.16.0

Ches 0.16.0

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最近发布2021年5月
SPM支持SPM

Jan Gorman 维护。



Ches 0.16.0

Ches

CI codecov.io SwiftPM Compatible Carthage compatible Version License Platform

实验性:@functionBuilder支持

@functionBuilder看起来与这项任务非常匹配。有一个专门的GraphQLBuilderTests测试套件,展示了支持的案例。在其基本形式中,您可以构建一个查询,如下所示:

import Chester

let query = GraphQLQuery {
  From("posts")
  Fields("id", "title")
}

现在可以在其逻辑顺序中定义嵌套查询。

let query = GraphQLQuery {
  From("posts")
  Fields("id", "title")
  SubQuery {
    From("comments")
    Fields("body")
    SubQuery {
      From("author")
      Fields("firstname")
    }
  }
}

已知问题

  • 包含多个根字段和参数的查询会导致编译器错误(例如:'Int' 无法转换为 'Any'

使用方法

Ches使用构建器模式来构建GraphQL查询。在其基本形式中,您可以使用它如下:

import Chester

let query = QueryBuilder()
  .from("posts")
  .with(arguments: Argument(key: "id", value: "20"), Argument(key: "author", value: "Chester"))
  .with(fields: "id", "title", "content")

// For cases with dynamic input, probably best to use a do-catch:

do {
  let queryString = try query.build
} catch {
  // Can specify which errors to catch
}

// Or if you're sure of your query

guard let queryString = try? query.build else { return }

您可以添加子查询。根据需要添加尽可能多的。您也可以嵌套它们。

let commentsQuery = QueryBuilder()
  .from("comments")
  .with(fields: "id", content)
let postsQuery = QueryBuilder()
  .from("posts")
  .with(fields: "id", "title")
  .with(subQuery: commentsQuery)

您可以同时搜索多个集合。

let search = QueryBuilder()
  .from("search")
  .with(arguments: Argument(key: "text", value: "an"))
  .on("Human", "Droid")
  .with(fields: "name")
  .build()

请检查包含的单元测试以获取更多示例。

要求

  • Swift 5
  • Xcode 10.2+
  • iOS 8

安装

Chester可以通过CocoaPods获取。要安装它,只需将以下行添加到您的Podfile中

pod "Chester"

或使用Carthage。将Chester添加到Cartfile

github "JanGorman/Chester"

或使用Swift包管理器。要安装它,只需转到文件 > Swift包 > 添加Swift包依赖关系,并将 "https://github.com/JanGorman/Chester.git" 添加为Swift包URL。或将以下行添加到Package.swift

dependencies: [
    .package(url: "https://github.com/JanGorman/Chester.git", from: "0.13.0")
]

作者

Jan Gorman

许可协议

Chester处于MIT许可下。有关更多信息,请参阅LICENSE文件。