iOS swift Alamofire+HandyJSON网络框架封装

本文介绍了如何在Swift中使用Alamofire+HandyJSON进行网络框架的封装,包括网络请求接口的实现、数据解析模型的定义以及简单使用示例。通过这个过程,读者可以深入理解swift网络请求和数据解析的原理。同时,文章提供了一段完整的源码供参考。
摘要由CSDN通过智能技术生成

iOS swift Alamofire+HandyJSON网络框架封装


我们在学习Objective_C时使用的网络框架是AFNetworking+MJExtension,而在swift中Alamofire+HandyJSON取代了它,如果你是第一次学习和尝试封装swift的网络框架,可能会遇到一些坑,但踩过这些坑之后你会对Alamofire+HandyJSON的认识加深,能更好地理解swift网络请求中数据解析的一个原理和规则。我个人封装了一个简单的网络框架,有待优化的地方还请指正,下面是源码:

1、封装的网络接口方法

 func yb_request<T : HandyJSON>(path : String,params : [String:Any]?,block : @escaping (handJsonModel<T>) -> Void){
    // 验证服务器的公钥
   // 默认获取了 cer 结尾的文件,只需要把证书放到项目里边就行了,不需要显示指定
  //   let trustManager = ServerTrustManager(evaluators: [
 //    "serverUrl": PublicKeysTrustEvaluator()
 // ])
    
    //alamofire5.0双向认证
 // let session = Session(delegate: WSSessionDelegate(), serverTrustManager: trustManager)
    
    //网络超时
    let url = baseUrl + path
    AF.session.configuration.timeoutIntervalForRequest = 30
    
    //当前时间戳
    let openTime : TimeInterval = Date().timeIntervalSince1970
    
    let openTimeStr : String = String(Int(openTime))
    
    //当前版本
    let version : String = "5.22"
    
    //字典转json
    var reqDataBase64 : String!
    if params != nil {
        if (!JSONSerialization.isValidJSONObject(params ?? [])) {
            print("无法解析出JSONString")
            return
        }
        let paramsData = try? JSONSerialization.data(withJSONObject: params ?? [], options: [])
        let jsonStr = String(data: paramsData!, encoding: String.Encoding.utf8)! as String
        let data = jsonStr.data(using: String.Encoding.utf8)
        reqDataBase64 = data?.base64EncodedString(options: NSData.Base64EncodingOptions.init(rawValue: 0))
    }else{
        reqDataBase64 = ""
    }
    
    //签名
    let discription : String! = openTimeStr + pid + reqDataBase64
    let handler : HBRSAHandler  = HBRSAHandler.init()
    let ret : Bool = handler.importKey(with: KeyTypePrivate, andkeyString: privateKey)
    print(String(ret) + "请检查RSA的配置")
    let signedString : String = handler.sign(discription)
    let parameters : [String : String]! = ["pid":pid,"version":version,"opentime":openTimeStr,"reqdata":reqDataBase64,"sign":signedString,"sessionId":""]
    
    let headers: HTTPHeaders = [
        "Accept" : "application/json",
        "Connection" : "keep-alive",
        "Content-Type" : "application/json;charset=UTF-8;"
     ]

    AF.request(url, method: HTTPMethod.post,parameters: parameters,encoding: JSONEncoding.default,headers: headers).responseDecodable {(response:DataResponse<encodableModel, AFError>) in
        let json = try? JSONSerialization.jsonObject(with: response.data!,options:[.mutableContainers,.mutableLeaves,.fragmentsAllowed])
        let dic = json as! Dictionary<String, Any>
        let result = handJsonModel<T>.deserialize(from: dic)
        print("接口返回数据 --- \n\(dic)")
        block(result!)
    }
     }

2、对接口返回数据的解析,以下是我定义的几个数据模型model,根据接口的返回格式,定义符合你个人需求的模型,我们需要的模型是继承HandyJSON的,因为我们请求中的范型是指向HandyJSON类型的
在这里插入图片描述
在这里插入图片描述
3、接口方法和模型整理好之后,下面给大家介绍下简单的使用,简单粗暴的打印出返回列表数组中的某一个model元素信息
在这里插入图片描述
真香!赶紧自己体验下封装swift的网络框架吧。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值