Ios 使用Swift 3在回调中引发错误

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执行API调用:

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
        )
    }
}