【问题标题】:How to catch if any failure happens in Alamofire 4如果 Alamofire 4 中发生任何故障,如何捕获
【发布时间】:2017-05-16 17:30:51
【问题描述】:

我正在以这种方式调用我的网络服务。

public func prepareUrl (baseUrl: String, appendString: String, bindedParams: String, isAuthorized: Bool, method: HTTPMethod, jsonBody: [String:String], callback: @escaping (String) ->Void> Void)
{
    let dm=Datamanager.sharedInstance
    let baseUrl=dm.globalUrl
    let urlString=baseUrl!+appendString as String+bindedParams as String
    print(urlString)
    Alamofire.request(urlString, method: method, parameters: nil, encoding: JSONEncoding.default)
        .downloadProgress(queue: DispatchQueue.global(qos: .utility)) { progress in
            print("Progress: \(progress.fractionCompleted)")
        }

        .validate { request, response, data in
            // Custom evaluation closure now includes data (allows you to parse data to dig out error messages if necessary)
            return .success


        }

        .responseJSON { response in
            debugPrint(response)
            callback("success")
    }
}

但是我如何在这里进行错误处理。即使我提到了 github Alamofire 4.0 迁移,我也不清楚该怎么做。 请帮我。 谢谢

【问题讨论】:

  • 粘贴的代码无法编译。守卫声明中缺少一个主体。
  • 对不起,我更新的方式正确。

标签: ios swift3 alamofire


【解决方案1】:

在 Alamofire gitHub 中有这样的方法: 你不需要验证,Alamofire 默认验证是 200 到 299 是成功的,你可以从响应中得到错误。

public func prepareUrl (baseUrl: String, appendString: String, bindedParams: String, isAuthorized: Bool, method: HTTPMethod, jsonBody: [String:String], callback: @escaping (String) ->Void> Void)
        {
            let dm=Datamanager.sharedInstance
            let baseUrl=dm.globalUrl
            let urlString=baseUrl!+appendString as String+bindedParams as String
            print(urlString)
            Alamofire.request(urlString, method: method, parameters: nil, encoding: JSONEncoding.default)
                .downloadProgress(queue: DispatchQueue.global(qos: .utility)) { progress in
                    print("Progress: \(progress.fractionCompleted)")
                }
                .responseJSON { response in
                    debugPrint(response)
                    switch response.result {
                    case .success:
                        callback("success")
                    case .failure(let error):
                        print(error)
                    }

            }
        }

查看documentation

【讨论】:

  • 我在纠结应该把这个放在哪里
  • 为什么要验证?告诉我,这样我就可以放完整的代码了。
  • 如果我遇到任何网络故障或 HTTP 状态代码变成错误代码
  • @Randi 再看看答案
猜你喜欢
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-14
  • 1970-01-01
  • 1970-01-01
  • 2020-12-16
相关资源
最近更新 更多