iOS swift Alamofire+HandyJSON网络框架封装

article/2025/9/12 2:50:01

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 + pathAF.session.configuration.timeoutIntervalForRequest = 30//当前时间戳let openTime : TimeInterval = Date().timeIntervalSince1970let openTimeStr : String = String(Int(openTime))//当前版本let version : String = "5.22"//字典转jsonvar 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 Stringlet data = jsonStr.data(using: String.Encoding.utf8)reqDataBase64 = data?.base64EncodedString(options: NSData.Base64EncodingOptions.init(rawValue: 0))}else{reqDataBase64 = ""}//签名let discription : String! = openTimeStr + pid + reqDataBase64let 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>) inlet 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的网络框架吧。


http://chatgpt.dhexx.cn/article/LBT9a1D3.shtml

相关文章

Swift 类似HandyJSON解析Struct

Swift 类似HandyJSON解析Struct HandyJSON从源码解析Struct获取TargetStructMetadata获取TargetStructDescriptor实现TargetRelativeDirectPointerFieldDescriptor和FieldRecordfieldOffsetVectorOffset计算偏移量 代码的验证 HandyJSON HandyJSON是阿里开发的一个在swift上把…

HandyJSON:Swift语言JSON转Model工具库

背景 JSON是移动端开发常用的应用层数据交换协议。最常见的场景便是&#xff0c;客户端向服务端发起网络请求&#xff0c;服务端返回JSON文本&#xff0c;然后客户端解析这个JSON文本&#xff0c;再把对应数据展现到页面上。 但在编程的时候&#xff0c;处理JSON是一件麻烦事。…

HandyJSON和SwiftyJSON的应用

2019独角兽企业重金招聘Python工程师标准>>> 1. HandyJSON的应用 想要通过HandyJSON实现序列化和反序列化, 必须实现HandyJSON协议, 不需要继承NSObject对象, 实现协议必须实现public init(){} 方法. 序列化和反序列化支持struct和enumerate类型. HandyJSON可支持非…

(时频分析学习)Week01:傅里叶级数,S变换与广义S变换

学习内容:了解了傅里叶变换相关内容,掌握了基本的傅里叶函数的性质、特性和背景。了解S变换和广义S变换的公式和具体含义。 s变换: (在"基准"论文中)意义: 公式: (傅里叶原公式),再有ω2πf 和 f(t)x(t)w(τ-t)进行转换 在另一篇论文中: 广义s变换: 加上了一点关…

解构变换矩阵:如何使变换矩阵分解为位移(T),旋转(R),缩放(S)矩阵

解构变换矩阵 给定一个转换的复合矩阵&#xff0c;关于组成该转换的任何单个转换的信息就会丢失。 我们如果有一个复合矩阵&#xff0c;怎么能使其分解为TRS三个矩阵呢&#xff1f;即如何完成下述变化&#xff1a; 其中M是给定的变换矩阵&#xff0c;T是平移矩阵&#xff0c;R是…

SS2022-Z变换-性质-什么是z变换的时移特性?

简 介&#xff1a; 本文介绍了z变换时移特性。 关键词&#xff1a; z变换&#xff0c;时移特性 #mermaid-svg-EnOHOPxDmWhoesDM {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-EnOHOPxDmWhoesDM .error-icon{fill:#…

【转】传递函数中拉普拉斯变换的s是用来干什么的?

自控书里一上来就到处是s,这个s到底是个什么东西? 好我知道s是拉普拉斯变换出来的,但为什么要搞这样一个变换?这个s的物理意义是什么? 为什么传递函数的极点决定系统的性质? …… 要解答这些问题,首先要从拉普拉斯变换讲起。 -----------------------------------------…

S变换的Python代码

S变换的Python代码 S变换简介S变换Python程序 S变换简介 S变换&#xff0c;又称为Stockwell变换&#xff0c;由R. G. Stockwell于1996年提出。具体的定义如下&#xff1a; S变换在傅里叶域的表示形式为&#xff1a; 离散的S变换为&#xff1a; S变换克服了短时傅里叶变换固…

S变换画图

The S -transform with windows of arbitraryand varying shape 想画如上的三张图&#xff0c;可是问题 &#xff08;1&#xff09;滤波窗口的平滑实现 The filter (applied to the full 200£400 S-transform matrix)is constructed in Matlab by constructing a two-dime…

【广义S变换】一维广义S变换对非平稳信号处理的matlab仿真

1.软件版本 matlab2013b 2.本算法理论知识 参考文献: 《广义S变换时频分析的应用研究》 《时频分布与地震信号谱分析研究》 《非平稳信号广义S不变换及其在SAR图像分析中的应用研究》 《S变换时变滤波在去噪处理中的应用研究》 《广义S变换域时频特征分析及微弱目标检测…

频域/s域/z域三大变换的性质对比

本文主要介绍三大变换&#xff08;傅里叶变换、拉普拉斯变换及Z变换&#xff09;的性质对比及其常用信号变换。

S域到Z域变换和差分方程

1.s域的传递函数 G(s) 2 / (1500s 1) * exp(-100s) matlab 里面的命令是 sys tf(2,[1500,1],inputdelay,100) 得到 2 exp(-100*s) * ---------- 1500 s 1 2.求 Z域传递函数 dsy c2d(sys,10,z) % 10 为间隔采样时间 得到 0.01329 z^(…

matlab实现从s域变成z域、matlab实现长除法逆z变换实例

今天在复习微型计算机控制技术这门课时&#xff0c;感觉还是和当初学习时一样&#xff0c;计算量有点大。 主要是体现在&#xff1a;&#xff08;1&#xff09;、连续S域到离散Z域的变换。&#xff08;2&#xff09;、在画数字控制器和输出波形前对Y(z)和U(z)的长除法化简。 …

s域和z域变换笔记

连续函数 1、常见信号的拉普拉斯变换&#xff1a; 脉冲信号 δ&#xff08;t&#xff09;------------1 阶跃信号 μ&#xff08;t&#xff09;------------- 斜坡信号 t ------------------ 加速度信号 ---------------- 指数类信号 --------------- 正弦…

傅里叶变换(FS、FT、DTFT、DFT、DFS、FFT)、拉普拉斯变换和Z变换

傅里叶变换的目的&#xff1a;时域转为频域&#xff0c;滤波&#xff0c;求解微分方程等 1. FS&#xff08;Fourier Series&#xff09; 傅里叶级数&#xff1a;时域周期连续&#xff0c;频域离散。 前提&#xff1a;任何信号都可以看作是无限多的正弦波的叠加。 时域&#x…

Z变换

信号与系统的分析方法 可以分为两大类&#xff1a;时域分析和变换域分析 1.时域分析法&#xff1a; &#xff08;1&#xff09;连续时间信号与系统&#xff1a;信号的时域运算、分解&#xff0c;微分方程的经典解法&#xff1b;卷积积分 &#xff08;2&#xff09;离散时间…

matlab实现S域到Z域变换

传递函数如下: Z变换: 代码如下: %构造传递函数 h tf(10, [0.2 1 0]) %Z变换 zh c2d(h, 0.2,zoh) %得到分子分母系数 [num den] tfdata(zh, v) %得到零极点 [z, p, k] tf2zpk(num, den) 运行结果如下: h 10-----------0.2 s^2 sContinuous-time transfer functio…

S变换在特征提取中的使用

S变换 S变换采用高斯窗函数且窗宽与频率的倒数成正比&#xff0c;免去了窗函数的选择和改善了窗宽固定的缺陷&#xff0c;并且时频表示中各频率分量的相位谱与原始信号保持直接的联系&#xff0c;S变换具有良好的时频特性&#xff0c;适合用S变换对信号的一些时频与特征进行提取…

S变换

哈哈&#xff0c;这两天在整理时频分析的方法&#xff0c;大部分参考网上写的比较好的资料&#xff0c;浅显易懂&#xff0c;在这谢过各位大神了&#xff01; 今天准备写下S变换&#xff0c;由于网上资料较少&#xff0c;自己尝试总结下&#xff0c;学的不好&#xff0c;望各位…

S变化广义s变化和时频域特征-matlab

S变换(S-transform)最先出现是在1996年,由外国学者Stockwell提出,一般情况下,可以通俗的将S变换理解为小波变换和傅里叶变换的提升,充分弥补了傅里叶变换和小波变换所存在的不足之处,例如傅里叶变换的窗口尺度不可以随意改变,但是S变换就无此限制,与此同时,S变换还实…