2016-09-26 25 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 
    ) 
}