简单封装Alamofire
前言:
第三方库提供的API有时候并不能直接提供在项目里面直接调用,为了避免第三方库的不稳定性带来的影响,将其封装使用是个很好的做法。类似于JPA或MyBatis这样的“三层架构”实际上可以变换思路改成封装第三方库的做法,下面是一个利用协议和闭包简易封装的Alamofire做法,过程非常简单。
协议层:
协议层定义两个待实现的方法,一个为get请求,一个为post请求。当然,必要的数参数和闭包(数据请求完后将其回调出)也是具备的。内容如下:
import Foundation
import SwiftyJSONprotocol NetworkUtil {// 均使用逃逸闭包来将请求结果回调出static func postRequest(URLString: String, parameters : [String : Any]?, callback: @escaping (_ result: Any) -> ())static func getRequest(URLString: String, parameters : [String : Any]?,callback: @escaping (_ result: Any) -> ())
}
Alamofire层:
相当于数据库连接池的部分(比喻不太恰当,但可以这样理解),该层只用来接受参数和发出参数,和具体的业务逻辑没有任何关系。
import Foundation
import Alamofireenum MethodType {case getcase post
}class AlamofireLayer{class func requestData(_ type : MethodType, URLString : String, parameters : [String : Any]? = nil, finishedCallback : @escaping (_ result : Any) -> ()) {let method = type == .get ? HTTPMethod.get : HTTPMethod.postAlamofire.AF.request(URLString, method: method, parameters: parameters).responseJSON { (response) inswitch response.result {case .success(let json):finishedCallback(json)breakcase .failure(let error):print("error:\(error)")break}}}}
实现层:
实现层就是具体实现协议的层次,这里就是针对具体业务逻辑而对接的方法。
import Foundation
import SwiftyJSONclass NetworkImpl: NetworkUtil{static func getRequest(URLString: String, parameters: [String : Any]?, callback: @escaping (Any) -> ()) {AlamofireLayer.requestData(MethodType.get, URLString: URLString, parameters: parameters) { result incallback(result)}}public static func postRequest(URLString: String, parameters: [String : Any]?, callback: @escaping (Any) -> ()) {AlamofireLayer.requestData(MethodType.post, URLString: URLString, parameters: parameters) { result incallback(result)}}}
调用:
调用一般是在Controller层里面进行,如下文看到的,我们进行的网络请求实际上和Alamofire没有任何关系,假设我们要切换到Moya,更改实现层的内容即可,而不必在Controller层里面更改所有的请求部分。
let url = "https://itunes.apple.com/lookup?"NetworkImpl.getRequest(URLString: url, parameters: ["id": requestTrackId!]) { (response) inlet jsonData = JSON(response)print("------> RAW DATA:\(jsonData)")}
简单封装Alamofire相关推荐
- swift5.0 封装Alamofire
swfit5.0使用网络请求框架Alamofire的简单封装 完整代码如下 // // NotoceSwiftNetWorkTools.swift // NoticeXi // // Creat ...
- swift中网络请求库的封装(Alamofire+HandyJSON)
swift中网络请求库的封装(Alamofire+HandyJSON) 我们用swift语言来写iOS的程序,会用Alamofire+HandyJSON来取代AFNetworking+MJExtens ...
- Android APP更新下载工具类——简单封装DownloadManager
几乎所有APP都包含了检查更新功能,更新下载功能的实现方式常用的有两种:1.使用App网络框架的文件下载请求:2.使用自带的DownloadManager类:本文介绍第二种,简单封装一下Downloa ...
- 简单封装浏览器 cookie 工具类
版权声明:本文首发 http://asing1elife.com ,转载请注明出处. https://blog.csdn.net/asing1elife/article/details/8265571 ...
- 小程序简单封装 request 请求
我在这里做了详细的介绍 : 小程序简单封装 request 请求 转载于:https://www.cnblogs.com/biangz/p/9984340.html
- 简单封装 HTTP 请求
2017-2-19 更新到第二版: 源码地址:http://git.oschina.net/sp42/ajaxjs/tree/master/ajaxjs-base/src/com/ajaxjs/net ...
- 【JDBC】实现对JDBC 连接的简单封装
package util;import java.sql.Connection; import java.sql.DriverManager;/**** 实现对JDBC 的封装* @author mq ...
- Android AsyncTask 深度理解、简单封装、任务队列分析、自定义线程池
前言:由于最近在做SDK的功能,需要设计线程池.看了很多资料不知道从何开始着手,突然发现了AsyncTask有对线程池的封装,so,就拿它开刀,本文将从AsyncTask的基本用法,到简单的封装,再到 ...
- ios开发之使用多文件上传的简单封装最原始的
ios开发之使用多文件上传的简单封装最原始的 // // ViewController.m // 18-上传多个文件 // // Created by 鲁军 on 2021/2/13. //#impo ...
最新文章
- php多文件上传类源码,PHP单文件上传类或多文件上传类源码
- DLL返回自定义结构的数组
- 控制html页面在浏览器显示比例,判断浏览器缩放比例的方法_html/css_WEB-ITnose
- 成功解决python中出现的IndentationError: expected an indented block的错误
- Java之JDK和JRE
- 【操作系统】操作系统不可怕,重装系统不求人,因为我们是GISer!
- java单链表查询功能,Java 实现简答的单链表的功能
- php超市结算,超市物品结算简易程序代码
- 看我如何用Dataphin实现自动化建模
- 词法分析器生成工具flex
- 单片机移频防啸叫_基于ARM9的防啸叫音频放大器的设计
- 从SQL Server生成文档
- PHP --字符串编码转换(自动识别原编码)
- WinMerge只显示差异部分的设置方法
- 开箱即用——用模板快速上线一个HR 服务中心
- 持续集成之企业微信通知:1:群机器人使用方法介绍
- ftp上传文件 严重文件传输错误
- C语言理论复习,重点回顾
- 机器指令与微指令之间的关系
- android分析内存工具,Android Studio内存泄漏分析工具汇总