2015-10-04 75 views
8

無法調用非函數類型'NSHTTPURLResponse?'的值enter image description here無法調用非函數類型'NSHTTPURLResponse?'的值Alamofire ObjectMapper

有人可以幫我嗎?

下面是代碼

public func responseObject<T: Mappable>(queue: dispatch_queue_t?, keyPath: String?, completionHandler: (NSURLRequest, NSHTTPURLResponse?, T?, AnyObject?, ErrorType?) -> Void) -> Self { 

    return response(queue: queue, responseSerializer: Request.JSONResponseSerializer(options: NSJSONReadingOptions.AllowFragments)) { request, response, result in 
     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { 
      let parsedObject = Mapper<T>().map(keyPath != nil ? result.value?[keyPath!] : result.value) 

      dispatch_async(queue ?? dispatch_get_main_queue()) { 
       completionHandler(self.request!, self.response, parsedObject, result.value ?? result.data, result.error) 
      } 
     } 
    } 
} 

我的壞,我沒有注意到Alamofire 2.0的返回類型,

這是固定的,更新的代碼是在這裏

public func responseObject<T: Mappable>(queue: dispatch_queue_t?, keyPath: String?, completionHandler: (NSURLRequest, NSHTTPURLResponse?, T?, AnyObject?, ErrorType?) -> Void) -> Self { 

let serializer = Request.JSONResponseSerializer(options: NSJSONReadingOptions.AllowFragments) 

return response(queue: queue, responseSerializer: serializer) { (Response) -> Void in 

     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { 
      let parsedObject = Mapper<T>().map(keyPath != nil ? Response.result.value?[keyPath!] : Response.result.value) 



      dispatch_async(queue ?? dispatch_get_main_queue()) { 
       completionHandler(self.request!, self.response, parsedObject, Response.result.value ?? Response.result.value, Response.result.error) 
      } 
     } 

    } 
} 
+0

我試過使用Alamofire 2.0響應串行器,這也給出了相同的錯誤 – Abh

+0

請寫下你的代碼,不要發佈一個屏幕截圖。 – SJuan76

+0

我已經添加了代碼。任何想法? – Abh

回答

3

有了這個錯誤我自己,花了一段時間找出爲什麼發生。看起來好像response()方法調用的參數與任何方法聲明都不匹配,那麼swift假定您的代碼指的是response屬性,NSHTTPURLResponse。因爲那裏有「隱藏」方法名稱的屬性,swift不能幫助你解決錯誤,指示哪個參數是一個問題,它只是在匹配任何方法時踢出。

在我的情況,completionHandler是因爲參數不匹配。請注意,它的示例代碼我看到.response { response in ... }這是有問題的。有沒有response方法採取「響應」封閉像responseStringresponseJSON等方法。

也就是說,Abh,我無法從你的代碼中看到確切的問題。

+0

你是如何解決這個問題的? – dejavu89

+1

我使用'response(隊列隊列:dispatch_queue_t?= nil,completionHandler:...) - > Self'方法,將'.response {response in ...}'改爲'completionHandler'的參數爲從示例代碼複製到'.response {_,_,_,error in ...}' –

+0

感謝您的回覆,但我無法在此處發佈我的代碼,因此我提出了一個新問題。它看起來像你可以回答它,請幫助,我會很樂意接受你的答案,如果有幫助http://stackoverflow.com/questions/39838463/alamofire-error-after-updating-to-latest-version – dejavu89

0

您需要將您的completionHandler標記爲@escaping。

相關問題