TibberSwift
是一个 Swift 包,旨在简化对 Tibber GraphQL 后端的简单查询,而无需嵌入大型库。TibberSwift 需要您提供 API 密钥才能运行。您需要编写 GraphQL 查询,并将其作为 .graphql
文件存储在您的 bundle 中,或者直接将查询添加到操作中。
TibberSwift
的工作方式是创建一个操作,该操作进而设置一个 Input
和一个 Output
。Input
是 Encodable
类型,Output
是 Decodable
类型。您可以查看示例应用中的自定义 UserLoginOperation
,了解如何在您的应用程序中创建操作。
TibberSwift 自带 Xcode 内置文档,但您也可以通过 https://ppeelen.github.io/TibberSwift/ 在线获取这些文档。
TibberSwift 可以通过 Swift Package Manager 安装
https://github.com/ppeelen/TibberSwift.git
示例
dependencies: [
.package(url: "https://github.com/ppeelen/TibberSwift.git", branch: "main"),
...
]
您可以在此 Github 项目中请求支持,但也有一个 Facebook 群组,您可以在其中请求支持和/或展示您的工作。请查看 Facebook 群组 Tibber for Developers。
TibberSwift 自带 Xcode 内置文档,此外还有一个示例应用程序,展示了如何从 Tibber 获取数据的几个示例。您需要从 Tibber 获取 API 密钥,可以通过 他们的开发者门户 或通过 oAuth 获取。
此文档会随着时间的推移不断更新,并包含更多示例。
使用从开发者门户或 OAuth 连接获取的 API 密钥初始化 TibberSwift。
let tibberSwift = TibberSwift(apiKey: "my-api-key")
您可以执行两种类型的操作。 一种是预定义的操作,它们存在于 TibberSwift 项目中,另一种是您可以创建自定义的操作。
TibberSwift 带有两个预定义的操作,名为 homes
和 consumption
。如果您想获取 Consumption.graphql
中定义的标准 consumption(基于 API Explorer 中的 consumption),您可以像这样从 Tibber swift 调用 consumption()
函数
private func fetchConsumption() {
Task {
do {
self.consumption = try await tibberSwift.consumption()
} catch {
debugPrint("Could not fetch the consumption. Error: \(error.localizedDescription)")
}
}
}
获取 homes 也是一样。
如果您希望创建自己的自定义操作,请按照以下步骤操作
GraphQL 使用查询来获取特定数据。 查看 API 参考,了解您可以创建哪些查询,并使用 API Explorer 试用它们。 一旦您有了一个查询,您需要为 Tibber Swift 定义 Input 和 Output。
输入参数是您发送到查询中的参数。 这可以是 resulution
和 last
,它们用于 Consumption。 某些查询不需要任何输入,例如获取哪个用户已登录。 在这种情况下,您可以使用 EmptyInput
作为您的输入参数。
您的输入应符合 Encodable
。
Output
是您希望从 GraphQL 中提取的数据,它存在于 viewer
节点内。 例子
{
"data": {
"viewer": {
<<< OUTPUT JSON >>>
}
}
}
您的 Output
应符合 Codable
创建 GraphQLOperation
的扩展,其中 *Input* = *您的新输入*,并且 *Output* = *您的新输出*。
示例
// Import the Tibber Swift project
import TibberSwift
// Create the operation
public extension GraphQLOperation where Input == EmptyInput, Output == UserLogin {
// Create and return the operation with your query
static func userLogin() -> Self {
GraphQLOperation(
input: EmptyInput(), // The input needed for your query
// The query you created in step 1
operationString: """
{
viewer {
login
}
}
"""
)
}
}
// The output you are expecting from the operation
public struct UserLogin: Codable {
public let login: String
}
如果您希望将您的查询分离到 graphql 文件中,您可以这样做,而是使用 GraphQLOperation(input:queryFilename:)
,如下所示
static func currentEnergyPrice() throws -> Self {
try GraphQLOperation(input: EmptyInput(), queryFilename: "CurrentEnergyPrice")
}
现在在您的代码中,剩下要做的就是运行该操作; 这是来自示例应用程序的一个示例
func userLoginAction() {
userLoginLoading = true
Task {
do {
let operation = GraphQLOperation.userLogin()
self.userLogin = try await tibberSwift.customOperation(operation)
userLoginLoading = false
} catch {
errorMessage = error.localizedDescription
userLoginLoading = false
}
}
}
此包当前不支持订阅。 这是将来应该添加的内容。