首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Alamofire验证器Validation

Alamofire验证器Validation

作者头像
Light413
发布2020-04-08 16:03:38
发布2020-04-08 16:03:38
2K0
举报

alamofire.png

Alamofire简单使用

Alamofire融合Swift本身的特点,使用起来更加简单方便。下面引用官方Demo,发起一个请求并json解析处理。

代码语言:javascript
复制
Alamofire.request("https://httpbin.org/get").responseJSON { response in
    print("Request: \(String(describing: response.request))")   // original url request
    print("Response: \(String(describing: response.response))") // http url response
    print("Result: \(response.result)")                         // response serialization result

    if let json = response.result.value {
        print("JSON: \(json)") // serialized json response
    }

    if let data = response.data, let utf8Text = String(data: data, encoding: .utf8) {
        print("Data: \(utf8Text)") // original server data as UTF8 string
    }
}

问题描述

以上Demo发起的请求在正常的情况貌似没什么问题,但前提必须是服务器正确响应了请求。一旦响应错误(比如500 ,404,403的错误)发生,就无法进入 responseJSON方法回调,所以你的Loading 会一直在转圈。程序就此进入假死状态。

一般我们只处理服务器返回200 成功的状态,其他的状态我们可直接判定为响应出现了错误。此时就需要在响应时进行验证 即这里所描述的 Validation,响应验证器。

添加验证器的请求

代码语言:javascript
复制
    Alamofire.request(url, method: method, parameters: parameters, encoding:encoding, headers: header)
        .validate()
        .responseJSON { (dataResponse) in
            DispatchQueue.main.async {
                switch dataResponse.result {
                case .success(let value):
                    if let dic = value as? [String:Any] ,let status = dic["state"] {
                        if "\(status)" == "200" {
                            if let success = successHandler {
                                success(dic);
                            }
                        }else{
                            //print(dic)
                            if let failure = failureHandler {
                                failure(dic["msg"] as? String)
                            } else {
                                HUD.show(info: "\(dic["msg"])");
                            }
                        }
                    }
                    break
                    
                case .failure(let error):
                    print(dataResponse.response?.statusCode);
                    break
                }
            }
    }

添加validate()默认验证 状态码在 (200..<300) 和 acceptableContentTypes,验证通过直接执行

代码语言:javascript
复制
case .success(let value):

否则执行

代码语言:javascript
复制
case .failure(let error):

这样即使出现上述中错误,我们也可以在failure回调中处理。

验证器Validation

Validation本身是一个闭包,在请求完成后调用该闭包对响应进行验证,如果符合验证的条件返回成功,不符合条件返回错误。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Alamofire简单使用
    • 问题描述
    • 添加验证器的请求
    • 验证器Validation
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档