Alamofire初探

上一篇文章介绍了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 in
            switch 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 in
    switch response.result {
   case let .success(data):
       print("data:\(String(describing: data))")
   case let .failure(error):
       print(error)
  }
}

//String示例
AF.request(url).responseString { response in
    switch response.result {
   case let .success(data):
       print("data:\(String(describing: data))")
   case let .failure(error):
       print(error)
  }
}

//JSON示例
AF.request(url).responseJSON { response in
    switch 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 in
    switch response.result {
   case let .success(data):
       print("data:\(String(describing: data))")
   case let .failure(error):
       print(error)
  }
}

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

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员华仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值