2016-09-26 38 views
1

我试图为Alamofire 4.0定义自定义模型序列化。到目前为止,我遵循responseJson和朋友使用的模型。具体来说,我至今是:自定义序列化在Alamofire 4.0中找到不正确的“响应”

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 
     ) 
    } 
} 

不幸的是,框架在某种程度上执行不力而行return response(是找到response属性(在Request定义),并没有相应的response方法(在DataRequest定义)这会导致编译错误:

Cannot call value of non-function type 'HTTPURLResponse?' 

我是什么在这里失踪,让这个在responseJson情况下工作,但不是在我的情况?

回答

0

显然,问题源于过度概括起来,不是编译器能够产生一个合适的类型DataRequest.serializeResponseModel()当我改变​​以下内容并指定相应的类型,工作的事情如预期:

@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 
    ) 
}