微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Apollo GraphQL Swift 错误:[标量中不允许使用变量]

如何解决Apollo GraphQL Swift 错误:[标量中不允许使用变量]

考虑查询

query iotDevices {
      devices_group_by_assets : device_func_devices(args: {search: {serialNo:"1234"}) {
        asset
        devices
      }
    }

这里的'device_func_devices'是一个服务器端实现的函数,它接受输入'serialNo'并返回与serialNo匹配的设备。 “serialNo”实际上是设备内部返回的每个设备对象中的一个键值。

我们的服务器将这些设备作为 scalar JSON 发送,我们在客户端通过在构建脚本中使用 Array 将其转换为 --passthroughCustomScalars。此处给出转换代码

public typealias json = [[String : Any?]]
extension Array: JSONDecodable {
  public init(jsonValue value: JSONValue) throws {
    guard let array = value as? Array else {
      throw JSONDecodingError.CouldNotConvert(value: value,to: Array.self)
    }
    self = array
  }
}

现在,当我们调用上面的 API ApolloGraphQL 时会在代码中抛出错误 [variables are not allowed in scalars] :

        switch result {
                                 case .success(let graphQLResult):
                                   if let errors = graphQLResult.errors {
                                      print("GRAPHQL ERRORS: \(errors)")
                                   }
                              }

代码编译和 API.swift 生成没有问题。我可以理解我们无法搜索标量内的项目,因为其类型未知。但在这种情况下,搜索确实发生在服务器端,响应只包含标量对象。我们也不需要从缓存中进行本地搜索,因为我们总是使用 .fetchIgnoringCacheCompletely。 我相信 Apollographql 应该返回正确的设备数组,因为在 apollo sdk 中没有发生实际搜索。 奇怪的是,Apollo-AndroidApollo-React 能够为此查询提供适当的数据。

我们现在被封锁了,请建议我们可以在这里做什么。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。