ResponseSerializer'不能使用Swift 3调用非函数types'NSHTTPURLResponse?'的值

在更新到Xcode 8 beta 6之前,我一直在使用下面的代码没有问题。它类似于Alamofire存储库的这个例子 。 今天早上,我更新了我的Alamofire库到最新的swift3分支,它现在与swift3兼容。它显示错误: Cannot call value of non-function type 'HTTPURLResponse?' 这里也存在类似的问题,但不是基于当前版本的Swift和Alamofire。

据我所知,这个错误是因为它认为我正在尝试返回Request属性response而不是函数response(responseSerializer: <T>, completionHandler: <(Response<T.SerializedObject, T.ErrorObject>) -> Void>) ,它认为这是因为在传递给函数的responseSerializercompletionHandler中的types错误。

我怎样才能调整这个代码,使其与函数声明和编译器兼容?

我添加@escaping到completionHandler来纠正错误。

 import Foundation import Alamofire import SwiftyJSON extension Alamofire.Request { public func responseObject<T: ResponseJSONObjectSerializable>(_ completionHandler: @escaping (Response<T, NSError>) -> Void) -> Self { let responseSerializer = ResponseSerializer<T, NSError> { request, res, data, error in guard let responseData = data else { let error = DFError.error(withDFCode: .dataSerializationFailed, failureReason: "Data could not be serialized because input data was nil.") return .failure(error) } let jsonData: Any? do { jsonData = try JSONSerialization.jsonObject(with: responseData, options: []) } catch { let error = DFError.error(withDFCode: .jsonSerializationFailed, failureReason: "JSON could not be serialized into response object") return .failure(error) } let json = SwiftyJSON.JSON(jsonData!) if let newObject = T(json: json) { return .success(newObject) } let error = DFError.error(withDFCode: .jsonSerializationFailed, failureReason: "JSON could not be serialized into response object") return .failure(error) } return response(responseSerializer: responseSerializer, completionHandler: completionHandler) //Error: Cannot call value of non-function type 'HTTPURLResponse?' } } 

你需要把你的completionHandler标记为@escaping

即使在closures时添加了@escaping ,我仍然看到这个错误。 我遇到的问题是我需要将扩展​​声明从extension Alamofire.Request { }更改为extension Alamofire.DataRequest { }