首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从Alamofire错误中获取潜在错误?

如何从Alamofire错误中获取潜在错误?
EN

Stack Overflow用户
提问于 2017-03-04 12:04:32
回答 2查看 4.1K关注 0票数 3

对于此请求:

代码语言:javascript
运行
复制
Alamofire.request("https://google.com").responseCollection { (response: DataResponse<[User]>) in
  guard response.result.isSuccess else {
    print(response.error)

    return
  }
}

我在控制台中看到打印了以下内容:

可选(我的

_

应用

_

name.BackendError.jsonSerialization(Alamofire.AFError.responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(Error Domain=NSCocoaErrorDomain Code=3840“字符0周围的值无效。”UserInfo={字符0周围的NSDebugDescription=Invalid值。})

我尝试过的:

代码语言:javascript
运行
复制
Alamofire.request("https://google.com").responseCollection { (response: DataResponse<[User]>) in
  guard response.result.isSuccess else {
    print(response.error)

    if let error1 = response.error as? AFError {
      print(error1)  // Execution DOES NOT reach here.
    }

    if let error2 = response.error as? BackendError {
      print(error2) // Execution DOES reach here.
    }

    return
  }
}

上面的照片:

jsonSerialization(Alamofire.AFError.responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(Error Domain=NSCocoaErrorDomain Code=3840“字符0周围的值无效。”UserInfo={字符0周围的NSDebugDescription=Invalid值。}))

我试图做的是找到潜在的错误,这样我就可以解析

**

,**

**

,和**

属性。

我创建了

Alamofire在

https://github.com/Alamofire/Alamofire#handling-errors

代码语言:javascript
运行
复制
enum BackendError: Error {
    case network(error: Error) // Capture any underlying Error from the URLSession API
    case dataSerialization(error: Error)
    case jsonSerialization(error: Error)
    case xmlSerialization(error: Error)
    case objectSerialization(reason: String)
}

并且我还实现了示例通用响应对象序列化,与下面的示例完全一样

https://github.com/Alamofire/Alamofire#generic-response-object-serialization

代码语言:javascript
运行
复制
extension DataRequest {
  @discardableResult
  func responseCollection(
    queue: DispatchQueue? = nil,
    completionHandler: @escaping (DataResponse<[T]>) -> Void) -> Self {
    let responseSerializer = DataResponseSerializer<[T]> { request, response, data, error in
      guard error == nil else {
        return .failure(BackendError.network(error: error!))
      }

      let jsonSerializer = DataRequest.jsonResponseSerializer(options: .allowFragments)
      let result = jsonSerializer.serializeResponse(request, response, data, nil)

      guard case let .success(jsonObject) = result else {
        return .failure(BackendError.jsonSerialization(error: result.error!))
      }

      guard let response = response else {
        let reason = "Response collection could not be serialized due to nil response."
        return .failure(BackendError.objectSerialization(reason: reason))
      }

      return .success(T.collection(from: response, withRepresentation: jsonObject))
    }

    return response(responseSerializer: responseSerializer, completionHandler: completionHandler)
  }
}

我想有

es,

s,并对其进行双向强制转换。

和/或

,但我似乎不能理解。

我怎样才能找到潜在的错误,这样我才能解析

**

,**

**

,和**

属性?

我使用的是Swift 3和Alamofire 4.3.0。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-19 05:06:20

对于Alamofire 4.3,请查看

代码语言:javascript
运行
复制
if case let .failure(error) = response.result {
    let error = error as NSError
    print("\(error.domain)")
    print("\(error.code)")
    print("\(error.userInfo)")
}
票数 1
EN

Stack Overflow用户

发布于 2021-03-01 01:52:34

我知道答案有点晚;-)。但是试试这个:

代码语言:javascript
运行
复制
... } catch let error as NSError {
print("UnderlyingError: \(String(describing: error.userInfo[NSUnderlyingErrorKey]))")}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42591945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档