Abh*_*Abh 8 swift alamofire swift2
无法调用非函数类型的值'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)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的不好,我没注意到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)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我自己也遇到过这个错误,并花了一段时间才弄清楚为什么会发生。看起来如果response()方法调用的参数与任何方法声明都不匹配,那么 swift 会假设您的代码引用了属性responsea NSHTTPURLResponse。因为存在“隐藏”方法名称的属性,所以 swift 无法帮助您解决指示哪个参数有问题的错误,它只是在匹配任何方法时进行下注。
就我而言,completionHandler由于其参数而不匹配。请注意,我看到的示例代码.response { response in ... }有问题。没有response像responseString、responseJSON等方法那样采用“响应”闭包的方法。
也就是说,Abh,我无法通过查看您的代码的确切问题来判断。
| 归档时间: |
|
| 查看次数: |
3103 次 |
| 最近记录: |