IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 简单封装Alamofire -> 正文阅读

[网络协议]简单封装Alamofire

前言:

第三方库提供的API有时候并不能直接提供在项目里面直接调用,为了避免第三方库的不稳定性带来的影响,将其封装使用是个很好的做法。类似于JPA或MyBatis这样的“三层架构”实际上可以变换思路改成封装第三方库的做法,下面是一个利用协议和闭包简易封装的Alamofire做法,过程非常简单。

协议层:

协议层定义两个待实现的方法,一个为get请求,一个为post请求。当然,必要的数参数和闭包(数据请求完后将其回调出)也是具备的。内容如下:

import Foundation
import SwiftyJSON

protocol 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 Alamofire

enum MethodType {
    case get
    case 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.post
        
        Alamofire.AF.request(URLString, method: method, parameters: parameters).responseJSON { (response) in
               
            switch response.result {
            case .success(let json):
                finishedCallback(json)
                break
            case .failure(let error):
                print("error:\(error)")
                break
            }
            
        }
    }

}

实现层:

实现层就是具体实现协议的层次,这里就是针对具体业务逻辑而对接的方法。

import Foundation
import SwiftyJSON

class NetworkImpl: NetworkUtil{
    
    static func getRequest(URLString: String, parameters: [String : Any]?, callback: @escaping (Any) -> ()) {
        AlamofireLayer.requestData(MethodType.get, URLString: URLString, parameters: parameters) { result in
            callback(result)
        }
    }
    
    public static func postRequest(URLString: String, parameters: [String : Any]?, callback: @escaping (Any) -> ()) {
        AlamofireLayer.requestData(MethodType.post, URLString: URLString, parameters: parameters) { result in
            callback(result)
        }
    }
  
}

调用:

调用一般是在Controller层里面进行,如下文看到的,我们进行的网络请求实际上和Alamofire没有任何关系,假设我们要切换到Moya,更改实现层的内容即可,而不必在Controller层里面更改所有的请求部分。

        let url = "https://itunes.apple.com/lookup?"
        NetworkImpl.getRequest(URLString: url, parameters: ["id": requestTrackId!]) { (response) in
            let jsonData = JSON(response)
            
            print("------> RAW DATA:\(jsonData)")

        }
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-13 09:37:35  更:2021-09-13 09:38:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年6日历 -2024/6/27 1:49:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码