无法调用非函数类型的值'NSHTTPURLResponse?'
有人可以帮我吗?
这是代码
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 :(得分:3)
我自己犯了这个错误并花了一段时间才弄清楚它为什么会发生。看起来如果response()
方法调用的参数与任何方法声明都不匹配,那么swift假定您的代码引用response
属性NSHTTPURLResponse
。因为有“阴影”方法名称的属性,swift无法帮助你解决指出哪个参数有问题的错误,它只是在匹配任何方法时都会出现问题。
就我而言,由于 参数,completionHandler
不匹配。请注意,我看到的示例代码.response { response in ... }
存在问题。没有response
方法采用“响应”关闭,就像responseString
,responseJSON
等方法一样。
那就是说Abh,我无法看出你的代码究竟是什么问题。
答案 1 :(得分:0)
您需要将completionHandler标记为@escaping。