我正在尝试使用Alamofire 3和最新版本的ObjectMapper(https://github.com/tristanhimmelman/AlamofireObjectMapper)实现AlamofireObjectMapper
(https://github.com/Hearst-DD/ObjectMapper)。
似乎AlamofireObjectMapper
尚未更新为与Alamofire 3合作,所以我正在尝试自己动手。
我来到这段代码,现在我被卡住了。
似乎通用类型T在响应的完成块内是不可访问的。是Alamofire
3更改还是Swift 2.1更改?
这是错误:
无法转换'T?'类型的值期望参数类型'_?'
public func responseObject<T: Mappable>(queue: dispatch_queue_t?, keyPath: String?, completionHandler: (NSURLRequest, NSHTTPURLResponse?, T?, AnyObject?, ErrorType?) -> Void) -> Self {
return response(queue: queue) { (request, response, data, error) -> Void in
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
let JSONResponseSerializer = Request.JSONResponseSerializer(options: .AllowFragments)
let result = JSONResponseSerializer.serializeResponse(request, response, data, error)
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 ?? response.data, result.error) // Here it shows the error: Cannot convert value of type 'T?' to expected argument type '_?'
}
}
}
}
答案 0 :(得分:14)
刚刚找到解决方案。 这似乎是Xcode 7.1 beta编译器的一个问题。它在“parsedObject”参数上给出了问题,并且下一个参数出错了。
completionHandler(self.request!, self.response, parsedObject, **result.value ?? data**, result.error)
因此,如果您碰巧遇到同样的错误,请查看所有其他参数是否正常。
祝你好运。答案 1 :(得分:0)
更新为mabril对Alamofire 3.0的回答
completionHandler(response.request!, response.response, parsedObject, response.result.value ?? response.data, response.result.error)