美文网首页
Swift学习笔记(三)Alamofire二次封装

Swift学习笔记(三)Alamofire二次封装

作者: Geniune | 来源:发表于2018-05-15 15:09 被阅读63次

    Alamofire如何集成可以查看这里

    创建一个BaseHttpClient类,在Alamofire基础之上二次封装

    func requestURL(url:String, params:Dictionary<String, Any>, method:HTTPMethod, success:((_ responseObj:Dictionary<String, Any>?) -> Void)?, failure:((_ e:Error) -> Void)?) -> Void {
        request(url, method: method, parameters: params, encoding: URLEncoding.default, headers: nil).responseJSON { (response) in
            if(response.error == nil){
                success!(response.result.value as? Dictionary<String, Any>)
            }else{
                failure!(response.error!)
            }
        }
    }
    

    创建一个BaseHttpClient的子类,命名为HttpClient,主要用于业务接口的URL、入参、回参做第一层处理

    例如业务接口返回格式如下图所示:Controller和View层需要使用的是data键对应的内容

    image.png

    使用二次封装的requestURL方法,处理回参数据,只有当status=200时才去解析data键值,其他情况均failure Block一个HttpExceptiont对象,用于提示用户错误信息

    func requestPath(Url:String, Params:Dictionary<String, Any>, Method:HTTPMethod, success :((_ responseObj:Dictionary<String, Any>?) -> Void)?, failure:((_ e:HttpException) -> Void)?) -> Void {
    
        self.requestURL(url: Url, params: Params, method: Method, success: { (responseObj) in
    
            //处理业务接口
            let status = responseObj!["status"] as! Int//获取status
    
            if status == 200{//取data对应的键值,Block success
    
                success?(responseObj!["data"] as? Dictionary<String, Any>)
            }else{//初始化HttpException对象,Block failure
    
                let e = HttpException.init(code: status, msg: responseObj!["message"] as! String)
                failure!(e)
            }
        }) { (e) in
    
            //初始化HttpException对象,Block failure
            let error = e as NSError
            let e = HttpException.init(code: error.code, msg: error.description)
            failure!(e)
        }
    }
    

    另外我们可以在HttpClient类中添加URL拼接、修改header、入参数据加密等

    还可以将请求封装成类方法:

    //GET
    class func GET(url:String, params:Dictionary<String, Any>, success:((_ responseObj:Dictionary<String, Any>?) -> Void)?, failure:((_ e:HttpException) -> Void)?) -> Void {
        HttpClient().requestPath(Url: url, Params: params, Method: .get, success: { (responseObj) in
            success!(responseObj)
        }) { (e) in
            failure!(e)
        }
    }
    

    在其他文件中可以这样调用GET请求:

    HttpClient.GET(url: requestURL, params: param, success: { (responseObj) in
    
    }) { (e) in
    
    }
    

    相关文章

      网友评论

          本文标题:Swift学习笔记(三)Alamofire二次封装

          本文链接:https://www.haomeiwen.com/subject/bwgedftx.html