上一篇文章介绍了AFNetworking网络库,作为它的姊妹Alamofire,不得不介绍下。

今天我们就来介绍Alamofire的使用。

前言

Alamofire是使用Swift语言开发的网络库,它和AFNetworking是同一班子的开发团队。

Alamofire使用链式编程实现的。具有简洁的语法,良好的性能和优秀的可读性等特点。

Alamofire,本质上是基于NSURLSession进行封装的,其核心是URLSession和URLSessionTask子类。其早期版本使用Alamofire.request(),5.0之后使用AF.request()。

一、下载Alamofire 源代码

源码地址:

https://github.com/Alamofire/Alamofire

二、Alamofire导入工程

github上介绍了三种导入方法(CocoaPods,Carthage,Swift Package Manager)。

今天详细介绍下Swift Package Manager(SPM)的方式。

具体步骤如下:

1.使用Xcode新建一个TestAlamofire工程,完成基本工程模块。

2.在工程设置中,选择

Tagets->General->

Frameworks,Libraries,and Embedded Content

如下图

3.点击加号后,进入库资源界面。由于Alamofire不是系统库,不能在系统列表库中查找到,需要外部链接。点击如下图所示。选择Add Package Dependency…

4.进入Apple Swift Page界面。在该界面右上角搜索框内,复制粘贴Alamofire官网的地址

https://github.com/Alamofire/Alamofire.git进行搜索Alamofire。

在搜索到Alamofire库后,可以修改想下载链接的版本号。默认是下载最新的版本。选择好之后,点击Add Package。就静静等待下载。

最后下载成功,即导入工程成功。如下图

这样就完成了Alamofire的导入。

三、Alamofire的使用

3.1 网络请求步骤

按照一般的网络请求有以下5个步骤。

1.设置请求url

2.设置URLRequest对象,配置请求相关信息

3.创建会话配置

4.创建会话URLSession

5.创建任务和设置请求回调,并发起请求

Alamofire对上述5步进行的封装,简化了步骤。

3.2 Alamofire的简单网络请求

func sendReq() -> Void {AF.request("https://httpbin.org/get").response { response inswitch response.result {case let .success(data):print("data:\(String(describing: data))")case let .failure(error):print(error)}}
}

上述代码主要是向测试网站发送一个GET请求并打印返回成功和失败的数据。

针对AF的request请求接口,Alamofire封装了三个同名接口,三个接口是针对不同的参数进行设置的。

open func request(_ convertible: URLConvertible,method: HTTPMethod = .get,parameters: Parameters? = nil,encoding: ParameterEncoding = URLEncoding.default,headers: HTTPHeaders? = nil,interceptor: RequestInterceptor? = nil,requestModifier: RequestModifier? = nil)open func request<Parameters: Encodable>(_ convertible: URLConvertible,method: HTTPMethod = .get,parameters: Parameters? = nil,encoder: ParameterEncoder = URLEncodedFormParameterEncoder.default,headers: HTTPHeaders? = nil,interceptor: RequestInterceptor? = nil,requestModifier: RequestModifier? = nil)open func request(_ convertible: URLRequestConvertible, interceptor: RequestInterceptor? = nil)

3.3 参数说明

参数一 convertible(可变化)

一个可变化的参数。其实就是请求的url地址。

参数二 method

请求方式。就是我们常说的GET,POST,DELTE等方式。

参数三 parameters

请求参数。业务数据的参数部分,如登录模块的userName,Password等之类的业务数据。

参数四 encoding

编码方式。

Alamofire支持两种编码方式:

JSONParameterEncoder和

URLEncodedFormParameterEncoder

若encoding设置为JSONEncoding, 即为JSON格式。

对应的 Content-Type 为 application/json,

一般在method为POST情况下,把参数数据以JSON格式放入HTTPBody里面。

若encoding设置为URLEncodeing, 即为ur追加格式。

对应的 Content-Type 为application/x-www-form-urlencoded; charset=utf-8,

一般在method为GET情况下,把参数数据以&key=value&key2=value2…格式方式追加url之后。

参数五 headers

请求头参数。http请求中请求头的参数设置,支持Json格式,例如设置token,cookie等参数。

参数六 interceptor

请求拦截器,主要用来在请求流程中拦截请求,并对请求进行一些必要的处理。支持RequestInterceptor协议。这个是高阶部分,不详细说。

参数七  requestModifier

请求修改器。在请求流程中修改数据,例如针对特定请求,不使用默认超时时间,而自定义超时时间。

3.3 Alamofire的返回响应

Alamofire支持4种返回响应处理方式:Data、String、 JSON、自定义类型。下面分别举例说明


let  url = "https://httpbin.org/get"
//Data示例
AF.request(url).responseData { response inswitch response.result {case let .success(data):print("data:\(String(describing: data))")case let .failure(error):print(error)}
}//String示例
AF.request(url).responseString { response inswitch response.result {case let .success(data):print("data:\(String(describing: data))")case let .failure(error):print(error)}
}//JSON示例
AF.request(url).responseJSON { response inswitch response.result {case let .success(data):print("data:\(String(describing: data))")case let .failure(error):print(error)}
}//自定义格式示例
struct PersonResponse: Decodable { let name: String,  let nickName : String, let age : Int }
AF.request(url).responseDecodable(of: PersonResponse.self) { response inswitch response.result {case let .success(data):print("data:\(String(describing: data))")case let .failure(error):print(error)}
}

以上就是Alamofire网络库等介绍。

Alamofire初探相关推荐

  1. 2021年大数据Flink(九):Flink原理初探

    Flink原理初探 Flink角色分工 在实际生产中,Flink 都是以集群在运行,在运行的过程中包含了两类进程. JobManager: 它扮演的是集群管理者的角色,负责调度任务.协调 checkp ...

  2. 从壹开始微服务 [ DDD ] 之一 ║ D3模式设计初探 与 我的计划书

    缘起 哈喽大家周四好!又是开心的一天,时间过的真快,我们的 <从壹开始 .net core 2.1 + vue 2.5 >前后端分离系列共 34 篇已经完结了,当然以后肯定还会有更新和修改 ...

  3. 经典算法研究系列:二、Dijkstra 算法初探

    经典算法研究系列:二.Dijkstra 算法初探  July   二零一一年一月 ====================== 本文主要参考:算法导论 第二版.维基百科. 写的不好之处,还望见谅. 本 ...

  4. Swift - 使用Alamofire通过HTTPS进行网络请求,及证书的使用

    (本文代码已升级至Swift3) 我原来写过一篇文章介绍如何使用证书通过SSL/TLS方式进行网络请求(Swift - 使用URLSession通过HTTPS进行网络请求,及证书的使用),当时用的是 ...

  5. swift集成alamofire的简单封装

    import UIKit import Alamofire enum MethodType{ case GET case POST } class NetworkTool: NSObject { cl ...

  6. las格式测井曲线_邹榕,等:顺北和托甫台区块奥陶系断裂结构单元测井响应特征初探...

    引用格式:邹榕,徐中祥,张晓明,等.顺北和托甫台区块奥陶系断裂结构单测井响应特征初探[J].油气藏评价与开发,2020,10(2):18-23.ZOUR, XU Z X, ZHANG X M, et ...

  7. 2018-4-15摘录笔记,《网络表征学习前沿与实践》 崔鹏以及《网络表征学习中的基本问题初探》 王啸 崔鹏 朱文武

    1.来源:<网络表征学习前沿与实践>  崔鹏 (1)随着数据的增加以及计算机计算速度的增加,想当然的以为速度快了,数据再多也是可以自己算的,但是若是数据之间存在着复杂的关系,那么处理一个样 ...

  8. Swift 3.0封装 URLSession 的GET/SET方法代替 Alamofire

    升级到 Swift3.0 之后,新版本的 Alamofire 只支持 iOS 9.0 以上的系统,如果要适配 iOS 8,需要自己封装 URLSession,下面是笔者的方案: 这里使用的是 Swif ...

  9. python argparse_Python 命令行之旅:初探 argparse

    本文首发于 HelloGitHub 公众号,并发表于 Prodesire 博客. 前言 你是否好奇过在命令行中敲入一段命令后,它是如何被解析执行的?是否考虑过由自己实现一个命令行工具,帮你执行和处理任 ...

最新文章

  1. Cookie和Session的区别与联系
  2. 【算法】弗洛伊德(Floyd)算法
  3. java设计模式---三种工厂模式之间的区别
  4. INRIX自动驾驶汽车平台扩大使用范围 帮助城市管理交通
  5. mac安装gdb及为gdb进行代码签名
  6. 08.存储Cinder→5.场景学习→08.Backup Volume→2.实操
  7. iOS 使用pods报错问题 pod --version
  8. 系统重温Pandas笔记:(六)连接
  9. 软件测试技术课后习题:第9章软件测试自动化-广东高等教育出版社,主编杨胜利
  10. 应聘总经理的答卷,供大家打分!(二)
  11. matlab模拟塞曼图谱,基于MATLAB的塞曼效应数值模拟
  12. 数据安全建设中合规管理措施
  13. python毕业设计作品基于django框架 景区购票系统毕设成品(4)开题报告
  14. 如何写一篇可实施的技术方案?
  15. echarts地图设置区块点击后颜色不改变
  16. 力扣 1818. 绝对差值和 数学 二分
  17. Augustus指南(Trainning部分)
  18. C++运行三维人脸重建 VRN
  19. 全方位梳理:为什么移动端UI设计会成为主流?
  20. SQLServer SubString函数提示[传递给 LEFT 或 SUBSTRING 函数的长度参数无效]错误的解决方法

热门文章

  1. 反序列化漏洞例子——fastjson反序列化漏洞的调试与分析
  2. OpenCV之边缘检测
  3. 博图注册表删除方法_回收站文件删除怎么恢复?数据恢复还得靠它
  4. Proteus:单片机动态数码管显示“HELLO”模拟
  5. 用hive实现股票的波峰和波谷
  6. Eclipse代码自动补全功能
  7. 区块链技术c java_区块链技术:智能合约入门
  8. 2014版SEO工具集最新最全收集
  9. uniapp 获取定位(经纬度) 并且用腾讯地图api解析省市区门牌号
  10. 0xC0000005: 写入位置 0x00000000 时发生访问冲突