对于此请求:
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值。})
我尝试过的:
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
:
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
:
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。
发布于 2017-03-19 05:06:20
对于Alamofire 4.3,请查看
if case let .failure(error) = response.result {
let error = error as NSError
print("\(error.domain)")
print("\(error.code)")
print("\(error.userInfo)")
}
发布于 2021-03-01 01:52:34
我知道答案有点晚;-)。但是试试这个:
... } catch let error as NSError {
print("UnderlyingError: \(String(describing: error.userInfo[NSUnderlyingErrorKey]))")}
https://stackoverflow.com/questions/42591945
复制相似问题