无法转换类型'T?'的值到期望的参数类型'_?' - 通用类型和完成块

问题描述:

我试图用Alamofire 3和最新版本的ObjectMapper(https://github.com/Hearst-DD/ObjectMapper)实现AlamofireObjectMapperhttps://github.com/tristanhimmelman/AlamofireObjectMapper)。无法转换类型'T?'的值到期望的参数类型'_?' - 通用类型和完成块

看起来AlamofireObjectMapper,还没有更新与Alamofire 3一起工作,所以我试图自己做。

我来到这段代码,现在我卡住了。

似乎通用类型T在响应的完成块内不可访问。一个Alamofire 3更改或Swift 2.1更改?

这是错误:

Cannot convert value of type 'T?' to expected argument type '_?'

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 '_?' 
      } 
     } 
    } 

} 

就找到了解决办法。 这似乎是Xcode 7.1 beta编译器的一个问题。它在“parsedObject”参数上给出了问题,并且在下一个参数上出现了错误。

completionHandler(self.request!, self.response, parsedObject, **result.value ?? data**, result.error) 

因此,如果碰巧遇到同样的错误,请查看所有其他参数都可以。

祝你好运。

+4

呵呵。幸运的是我很早就看到了你的答案。这是一种由于swift有用的错误消息而需要几个小时才能进行调试的错误。非常感谢 – villy393

+0

“使用未解析的运算符'**'”:( –

+0

哇,谢谢,错误也出现在我的下一个参数上(运行Xcode 8.0) – aryaxt

更新到mabril的答案Alamofire 3.0

completionHandler(response.request!, response.response, parsedObject, response.result.value ?? response.data, response.result.error)