swift - 无法将类型 'T?' 的值转换为预期的参数类型 '_?' - 通用类型和完成 block

标签 swift generics swift2 alamofire completionhandler

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

AlamofireObjectMapper 似乎还没有更新到与 Alamofire 3 一起使用,所以我正在尝试自己做。

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

似乎通用类型 T 在响应的完成 block 内不可访问。 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)

所以,如果你碰巧得到同样的错误,检查所有其他参数都没有问题。

祝你好运。

关于swift - 无法将类型 'T?' 的值转换为预期的参数类型 '_?' - 通用类型和完成 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32906733/

相关文章:

swift - 创建具有特定值/存储属性的枚举

ios - 泛型函数和 Any 的使用之间的区别

ios - 单向一对多的核心数据关系

c# - 通过 IList 后门通用列表

swift - Realm IOS Swift 过滤对象

java - 如何从我发送到 put(Object) 到 map 中的方法返回 List<String> (有示例)

ios - 关联类型 Swift 3

ios - 本地化英语和阿拉伯语应用程序,无需重新启动应用程序

ios - Xcode 7 和基于 swift 的框架

ios - AVAudioEngine & AVAudioPlayerNode didFinish 方法类似于 AVAudioPlayer