Ios 使用Swift 3在回调中引发错误
我目前正在使用Alamofire执行API调用:Ios 使用Swift 3在回调中引发错误,ios,error-handling,try-catch,alamofire,swift3,Ios,Error Handling,Try Catch,Alamofire,Swift3,我目前正在使用Alamofire执行API调用: Alamofire.request(baseUrl + path,method:rMethod,parameters:parameters,encoding: JSONEncoding.default,headers:headers) .responseJSON { response in switch response.result { case .su
Alamofire.request(baseUrl + path,method:rMethod,parameters:parameters,encoding: JSONEncoding.default,headers:headers)
.responseJSON { response in
switch response.result {
case .success(let data):
let json = JSON(data)
onCompletion(json, nil)
case .failure(let error):
print("Request failed with error: \(error)")
onCompletion(nil,error)
}
}
Alamofire以“结果”枚举方法管理响应而闻名(请检查此项):
显然,这种方法不起作用,因为Alamofire的responseJSON函数不会抛出:
/// Adds a handler to be called once the request has finished.
///
/// - parameter options: The JSON serialization reading options. Defaults to `.allowFragments`.
/// - parameter completionHandler: A closure to be executed once the request has finished.
///
/// - returns: The request.
@discardableResult
public func responseJSON(
queue: DispatchQueue? = nil,
options: JSONSerialization.ReadingOptions = .allowFragments,
completionHandler: @escaping (DataResponse<Any>) -> Void)
-> Self
{
return response(
queue: queue,
responseSerializer: DataRequest.jsonResponseSerializer(options: options),
completionHandler: completionHandler
)
}
}
///添加请求完成后要调用的处理程序。
///
///-参数选项:JSON序列化读取选项。默认为“.allowFragments”。
///-参数completionHandler:请求完成后执行的闭包。
///
///-返回:请求。
@可丢弃结果
公共职能部门(
队列:DispatchQueue?=nil,
选项:JSONSerialization.ReadingOptions=.allowFragments,
completionHandler:@正在转义(DataResponse
这是否意味着如果在第三方库回调中,我永远不会抛出错误?而不是onCompletion
处理程序抛出错误并用throw
标记封闭函数,我不能将封闭函数标记为throw,因为我应该修改Alamofire回调,然后将该方法包装在另一个方法中并throw
那里。onCompletion
属于哪里?onCompletion属于包装Alamofire的类。我尝试将其包装到另一个方法中,然后将其抛出。问题仍然存在。可能我没有正确地得到您的解决方案。您介意发布一个带有一些源代码的答案吗?它将帮助解决相同问题的任何人。感谢您删除了onCompletion
处理程序抛出错误并用throw
标记封闭函数,我不能将封闭函数标记为throw,因为我应该修改Alamofire回调,然后将该方法包装到另一个方法中并在那里抛出。onCompletion
属于哪里?onCompletion属于哪里s到正在包装Alamofire的类。我尝试将其包装到另一个方法中,并将其抛出。问题仍然存在。可能我没有正确地得到您的解决方案。您介意发布一个带有一些源代码的答案吗?它将帮助任何有相同问题的人。非常感谢
Alamofire.request(baseUrl + path,method:rMethod,parameters:parameters,encoding: JSONEncoding.default,headers:headers)
.responseJSON { response in
switch response.result {
case .success(let data):
let json = JSON(data)
onCompletion(json)
case .failure(let error):
throw error
}
}
/// Adds a handler to be called once the request has finished.
///
/// - parameter options: The JSON serialization reading options. Defaults to `.allowFragments`.
/// - parameter completionHandler: A closure to be executed once the request has finished.
///
/// - returns: The request.
@discardableResult
public func responseJSON(
queue: DispatchQueue? = nil,
options: JSONSerialization.ReadingOptions = .allowFragments,
completionHandler: @escaping (DataResponse<Any>) -> Void)
-> Self
{
return response(
queue: queue,
responseSerializer: DataRequest.jsonResponseSerializer(options: options),
completionHandler: completionHandler
)
}
}