Ches
实验性:@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")
]
作者
许可协议
Chester处于MIT许可下。有关更多信息,请参阅LICENSE文件。