来自服务器的Alamofire 4.0错误

时间:2016-11-03 15:32:52

标签: ios swift3 alamofire

您好我刚刚迁移到alamofire 4并且我只想发送来自服务器的错误,我发现了几种方法,但我只是想确保这是正确的方法,这是我的自定义responseobject类

public protocol ResponseObject {
init?(response: HTTPURLResponse, representation: Any)
}

enum BackendError: Error {
case network(error: Error)
case dataSerialization(error: Error)
case jsonSerialization(error: Error)
case xmlSerialization(error: Error)
case objectSerialization(reason: String)
}

extension DataRequest {
public typealias Validation = (URLRequest?, HTTPURLResponse, Data?) -> ValidationResult

func responseObject<T: ResponseObject>(
    queue: DispatchQueue? = nil,
    completionHandler: @escaping (DataResponse<T>) -> Void)
    -> Self
{
    let responseSerializer = DataResponseSerializer<T> { request, response, data, error in
        guard error == nil else {
            let jsonResponseSerializer = DataRequest.jsonResponseSerializer(options: .allowFragments)
            let result = jsonResponseSerializer.serializeResponse(request, response, data, nil)
            debugPrint(result)
            return .failure(BackendError.network(error: error!))
        }

        let jsonResponseSerializer = DataRequest.jsonResponseSerializer(options: .allowFragments)
        let result = jsonResponseSerializer.serializeResponse(request, response, data, nil)
        guard case let .success(jsonObject) = result else {
            return .failure(BackendError.jsonSerialization(error: result.error!))
        }
        guard let response = response, let responseObject = T(response: response, representation: jsonObject) else {
            return .failure(BackendError.objectSerialization(reason: "JSON could not be serialized: \(jsonObject)"))
        }
        return .success(responseObject)
    }
    return response(queue: queue, responseSerializer: responseSerializer, completionHandler: completionHandler)
}
}

我添加了一个调试印刷,所以从服务器看到错误,我看到它但是我必须在错误内部再次序列化de数据吗?以及如何将消息传递给我的自定义错误?

0 个答案:

没有答案