2015-10-04 47 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。

相关问题