前言:

第三方库提供的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相关推荐

  1. swift5.0 封装Alamofire

    swfit5.0使用网络请求框架Alamofire的简单封装 完整代码如下 // //  NotoceSwiftNetWorkTools.swift //  NoticeXi // //  Creat ...

  2. swift中网络请求库的封装(Alamofire+HandyJSON)

    swift中网络请求库的封装(Alamofire+HandyJSON) 我们用swift语言来写iOS的程序,会用Alamofire+HandyJSON来取代AFNetworking+MJExtens ...

  3. Android APP更新下载工具类——简单封装DownloadManager

    几乎所有APP都包含了检查更新功能,更新下载功能的实现方式常用的有两种:1.使用App网络框架的文件下载请求:2.使用自带的DownloadManager类:本文介绍第二种,简单封装一下Downloa ...

  4. 简单封装浏览器 cookie 工具类

    版权声明:本文首发 http://asing1elife.com ,转载请注明出处. https://blog.csdn.net/asing1elife/article/details/8265571 ...

  5. 小程序简单封装 request 请求

    我在这里做了详细的介绍 : 小程序简单封装 request 请求 转载于:https://www.cnblogs.com/biangz/p/9984340.html

  6. 简单封装 HTTP 请求

    2017-2-19 更新到第二版: 源码地址:http://git.oschina.net/sp42/ajaxjs/tree/master/ajaxjs-base/src/com/ajaxjs/net ...

  7. 【JDBC】实现对JDBC 连接的简单封装

    package util;import java.sql.Connection; import java.sql.DriverManager;/**** 实现对JDBC 的封装* @author mq ...

  8. Android AsyncTask 深度理解、简单封装、任务队列分析、自定义线程池

    前言:由于最近在做SDK的功能,需要设计线程池.看了很多资料不知道从何开始着手,突然发现了AsyncTask有对线程池的封装,so,就拿它开刀,本文将从AsyncTask的基本用法,到简单的封装,再到 ...

  9. ios开发之使用多文件上传的简单封装最原始的

    ios开发之使用多文件上传的简单封装最原始的 // // ViewController.m // 18-上传多个文件 // // Created by 鲁军 on 2021/2/13. //#impo ...

最新文章

  1. php多文件上传类源码,PHP单文件上传类或多文件上传类源码
  2. DLL返回自定义结构的数组
  3. 控制html页面在浏览器显示比例,判断浏览器缩放比例的方法_html/css_WEB-ITnose
  4. 成功解决python中出现的IndentationError: expected an indented block的错误
  5. Java之JDK和JRE
  6. 【操作系统】操作系统不可怕,重装系统不求人,因为我们是GISer!
  7. java单链表查询功能,Java 实现简答的单链表的功能
  8. php超市结算,超市物品结算简易程序代码
  9. 看我如何用Dataphin实现自动化建模
  10. 词法分析器生成工具flex
  11. 单片机移频防啸叫_基于ARM9的防啸叫音频放大器的设计
  12. 从SQL Server生成文档
  13. PHP --字符串编码转换(自动识别原编码)
  14. WinMerge只显示差异部分的设置方法
  15. 开箱即用——用模板快速上线一个HR 服务中心
  16. 持续集成之企业微信通知:1:群机器人使用方法介绍
  17. ftp上传文件 严重文件传输错误
  18. C语言理论复习,重点回顾
  19. 机器指令与微指令之间的关系
  20. android分析内存工具,Android Studio内存泄漏分析工具汇总

热门文章

  1. win 10 系统显示U盘隐藏文件
  2. 自己觉得有用的帖子(AI 论文写作等 )
  3. 猜数字游戏-学员版本
  4. Neutrino追问AMA第14期 | MYKEY CEO George:去中心化的身份系统是未来网络的一个核心基础设施
  5. 移动机器人 | 移动机器人的发展
  6. 前端工程化、模块化方案教程大全,现代前端高手进阶必经之路(欢迎收藏)...
  7. 如何提取代码中的中文字符串
  8. 分组背包问题(动态规划法)
  9. 十八、fork/join框架
  10. 破解新东方的flash教程