Swift------闭包封装网络请求

本文使用语言为 Swift4

import UIKit
import Alamofire
import MBProgressHUD
import SwiftyJSON

class HTTPRequestTool: NSObject {
    
    //创建网络请求单例
    static let defalut: HTTPRequestTool = {
        return HTTPRequestTool()
    }()
    //设为私有, 只能通过单例方法创建
    private override init() {}

    private var headers: HTTPHeaders?
    
    //将不变的 header 写入 defaultHTTPHeaders, 不用每次写
    func customHeaders(additionHeaders: HTTPHeaders) {
        var defalutHeader = SessionManager.defaultHTTPHeaders
        for (key, value) in additionHeaders {
            defalutHeader[key] = value
        }
        let configuration = URLSessionConfiguration.default
        configuration.httpAdditionalHeaders = SessionManager.defaultHTTPHeaders
    }
    
    func doRequest(url: String, method: HTTPMethod, params: [String: Any]?, encode: JSONEncoding, SuccessHandler: @escaping (_ result: JSON) -> Void) , ErrorHanler: @escaping () -> Void = { } {
        
        MBProgressHUD.showWait()
        DEBUGLog(message: "\(method), 请求 URL: \(url), 参数 Param: \(String.init(describing: params))")
        let request: DataRequest = Alamofire.request(url, method: method, parameters: params, encoding: encode, headers: headers)
        request.responseJSON { (response) in
            switch response.result {
            //请求成功
            case .success:
                MBProgressHUD.hideHUD()
                if let value = response.value {
                    let dataDic = JSON(value)
                    DEBUGLog(message: dataDic)
                    if let code = dataDic["code"].string {
                        if code == "0"{//成功返回数据
                            SuccessHandler(dataDic["data"])
                        }else if code == "7"{//约定的退出登录 code 码
                            //to do log out
                        }else{//服务器内部其它错误
                            if let message = dataDic["message"].string{
                                print(message)
                                //ErrorHanlder默认值为空实现, 需要时调用
                                ErrorHandler()
                            }
                        }
                    }
                }
            //请求失败
            case .failure(let error):
                MBProgressHUD.hideHUD()
                DEBUGLog(message: error)
            }
        }
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值