5

我正在尝试使用 Alamofire 3 和最新版本的 ObjectMapper ( https://github.com/Hearst-DD/ObjectMapperAlamofireObjectMapper ) 实现( https://github.com/tristanhimmelman/AlamofireObjectMapper )。

似乎 ,AlamofireObjectMapper尚未更新为与 Alamofire 3 一起使用,所以我正在尝试自己做。

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

似乎在响应的完成块内无法访问通用类型 T。是Alamofire3 变化还是 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 '_?' 
            }
        }
    }

}
4

2 回答 2

14

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

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

因此,如果您碰巧遇到相同的错误,请检查所有其他参数是否正常。

祝你好运。

于 2015-10-02T14:46:35.673 回答
0

更新到 mabril 对 Alamofire 3.0 的回答

completionHandler(response.request!, response.response, parsedObject, response.result.value ?? response.data, response.result.error)
于 2016-09-08T00:51:31.237 回答