blw*_*ers 4 ios swift alamofire swifty-json swift3
在更新到Xcode 8 beta 6之前,我一直在使用以下代码而没有问题.它与Alamofire存储库中的此示例类似.今天早上我将我的Alamofire库更新到最新的swift3分支,现在与beta 6兼容.它显示错误:此处Cannot call value of non-function type 'HTTPURLResponse?'存在类似的问题,但它不是基于当前版本的Swift和Alamofire.
根据我的理解,这个错误是因为它认为我试图返回Request属性response而不是函数,response(responseSerializer: <T>, completionHandler: <(Response<T.SerializedObject, T.ErrorObject>) -> Void>)并且它认为这是因为我responseSerializer或者completionHandler传入函数中的类型错误.
如何调整此代码以使其与函数声明和编译器兼容?
我添加@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?'
}
}
Run Code Online (Sandbox Code Playgroud)