Swift 自定义序列化发现不正确的“;回应";在Alamofire 4.0中
我正在尝试为Alamofire 4.0定义自定义模型序列化。到目前为止,我遵循的是Swift 自定义序列化发现不正确的“;回应";在Alamofire 4.0中,swift,alamofire,swift3,Swift,Alamofire,Swift3,我正在尝试为Alamofire 4.0定义自定义模型序列化。到目前为止,我遵循的是responseJson和朋友们使用的模型。具体而言,到目前为止,我得到的是: extension Alamofire.Request { public static func serializeResponseModel<T:ModelObject>(response:HTTPURLResponse?, data:Data?, error:Error?) -> Alamofire.Res
responseJson
和朋友们使用的模型。具体而言,到目前为止,我得到的是:
extension Alamofire.Request {
public static func serializeResponseModel<T:ModelObject>(response:HTTPURLResponse?, data:Data?, error:Error?) -> Alamofire.Result<T> {
switch serializeResponseJSON(options: [], response: response, data: data, error: error) {
case .success(let jsonObject):
do {
return .success(try T(json:jsonObject as! JSONObject))
}
catch {
return .failure(error)
}
case .failure(let error):
return .failure(error)
}
}
}
extension Alamofire.DataRequest {
public static func serializeResponseModel<T:ModelObject>() -> DataResponseSerializer<T> {
return DataResponseSerializer { _, response, data, error in
return Request.serializeResponseConcierge(response: response, data: data, error: error)
}
}
@discardableResult
public func responseModel<T:ModelObject>(queue: DispatchQueue? = nil, completionHandler: @escaping (DataResponse<T>) -> Void) -> Self
{
return response(
queue: queue,
responseSerializer: DataRequest.serializeResponseModel(),
completionHandler: completionHandler
)
}
}
我在这里遗漏了什么,允许它在
responseJson
案例中工作,但在我的案例中却不工作?显然,问题是由于过度泛化,以及编译器无法为DataRequest.serializeResponseModel()生成适当的类型
当我将responseModel
更改为以下内容并指定了适当的类型时,一切正常:
@discardableResult
public func responseModel<T:ModelObject>(queue: DispatchQueue? = nil, completionHandler: @escaping (DataResponse<T>) -> Void) -> Self
{
return response(
queue: queue,
responseSerializer: DataRequest.modelResponseSerializer() as DataResponseSerializer<T>,
completionHandler: completionHandler
)
}
@discardableResult
public func responseModel(队列:DispatchQueue?=nil,completionHandler:@escaping(DataResponse)->Void)->Self
{
返回响应(
队列:队列,
responseSerializer:DataRequest.modelResponseSerializer()作为DataResponseSerializer,
completionHandler:completionHandler
)
}
显然,问题源于过度泛化,并且编译器无法为DataRequest.serializeResponseModel()生成适当的类型。
当我将responseModel
更改为以下内容并指定适当的类型时,一切正常:
@discardableResult
public func responseModel<T:ModelObject>(queue: DispatchQueue? = nil, completionHandler: @escaping (DataResponse<T>) -> Void) -> Self
{
return response(
queue: queue,
responseSerializer: DataRequest.modelResponseSerializer() as DataResponseSerializer<T>,
completionHandler: completionHandler
)
}
@discardableResult
public func responseModel(队列:DispatchQueue?=nil,completionHandler:@escaping(DataResponse)->Void)->Self
{
返回响应(
队列:队列,
responseSerializer:DataRequest.modelResponseSerializer()作为DataResponseSerializer,
completionHandler:completionHandler
)
}