代码之家  ›  专栏  ›  技术社区  ›  MillerMedia

解析GraphQL failure()导致Swift

  •  0
  • MillerMedia  · 技术社区  · 5 年前

    我对Swift比较陌生,在解析graphqlapi调用的结果时遇到了问题。

    我看到'failure()'声明中的结果是NSError类型的,如果是'failure',我基本上会尝试访问它,然后访问NSError键。结果是:

    failure(Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." UserInfo={NSUnderlyingError=0x282232700 {Error Domain=kCFErrorDomainCFNetwork Code=-1005 "(null)" UserInfo={NSErrorPeerAddressKey=<CFData 0x280e54b40 [0x1faa4fcf0]>{length = 16, capacity = 16, bytes = 0x1002005036d7fb9f0000000000000000}, _kCFStreamErrorCodeKey=-4, _kCFStreamErrorDomainKey=4}}, NSErrorFailingURLStringKey=http://staging.mysite.com/api/, NSErrorFailingURLKey=http://staging.mysite.com/api/v2/, _kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-4, NSLocalizedDescription=The network connection was lost.})
    

    print("\(result)")
    

    结果是类型的对象 Result<GraphQLResult<Data>, Error>

    if let firstError = try? result.get().errors?.first {
        completion([], [], firstError)
        return
    }
    

    它通过了这个检查,所以它只是将它解释为一个正常的数据结果。我的问题是如何解析这些信息?

    我的想法是,我需要检查它是否失败,然后将其从“failure”类型中展开,然后可以将包含的信息视为NSError对象。我不能使用'contains',因为它不是字符串。有一个 get() 上的方法 result 这样你就可以 result.get().data result.get().error

    任何帮助我如何分析这些信息将不胜感激。谢谢!

    0 回复  |  直到 5 年前
        1
  •  1
  •   Peter Robert    5 年前

    结果是一个通用的swift枚举,它有两种状态:成功或失败。

    要从失败中得到错误,必须使用switch语句,例如:

    switch result {
       case .failure(let error):
         //Handle error here
        default:
           break
     }
    

    https://developer.apple.com/documentation/swift/result