【Alamofire源码解析】01 - 前言

在2017年初的时候,写了两篇文章介绍了Alamofire的基本用法和高级用法。但是这两篇文章都是仅限于如何使用,没有进行更深入的研究。考虑到在应用开发过程中,我们几乎无法避免网络相关的开发,所以决定花一些时间深入研究下Alamofire的源代码。让我们一起看看这个简单易用的网络框架是如何实现的,并且在看代码的过程中学习Swift的编程风格和良好的编程习惯。

在写这个系列的文章时,当时就想只是大概地过一下每一个文件里写了哪些类,每个类的作用大概是什么。但是感觉这样粗略地过一遍,有点过于简单,不能加深我们对网络请求的理解,所以最后决定仔细阅读每一个文件的每一个属性和方法,并且理解作者的意图,这样我们才能真正学到东西。

文件概述

文件名称 概述
AFError & Notifications & DispatchQueue+Alamofire 这里包含了三个比较简单的文件:1)AFError:整个项目中遇到的错误;2)通知名称;3)队列
Timeline 负责记录整个请求过程中的时间点
MultipartFormData 创建多表单数据
NetworkReachabilityManager 网络状态的工具类
Alamofire 包含了所有请求的入口
SessionManager 用于创建各种请求
Request 主要定义了各种请求类型
ParameterEncoding 三种参数编码的方式
SessionDelegate 处理URLSessionDelegate的所有回调
TaskDelegate 定义了几个delegate类型,处理URLSessionTaskDelegate的回调
Response 处理服务器返回的响应
ResponseSerialization 将服务器返回的响应序列化成我们想要的数据
Result 一个泛型枚举,用于表示请求成功或者失败
ServerTrustPolicy 处理服务器和客户端之间的验证
Validation 如何验证请求

类图

Alamofire整个项目的类型如下图(省略了Protocol),图中被箭头指向的是父类:

【Alamofire源码解析】01 - 前言_第1张图片
Alamofire类图

流程图

Alamofire大概的运行流程图如下:

  • 我们调用.request().download().upload().stream()时,SessionManager会创建对应的请求DataRequestDownlaodRequestUploadRequestStreamRequest
  • 然后SessionDelegate会处理URLSession对应的回调,TaskDelegate会处理URLSessionTask对应的回调
  • 调用.reponse().reponseData().reponseString().reponseJSON().reponsePropertyList()时,请求会把这些对应的response里面的代码以closure的形式加入到delegate.queue的operations中
  • 请求完成后,在urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?)运行队列的operations,reponse...()completionHandler就会携带有对应的DefaultDataResponseDefaultDownloadResponseDataResponseDownloadResponse

除了基本的请求和响应外,还有认证之类的,大家可以去自己看看。

【Alamofire源码解析】01 - 前言_第2张图片
Alamofire解析

如果对这个库不是很熟悉的话,建议大家按顺序来阅读这一系列的文章。此次代码的解析大部分都是直接在代码里面写注释,这样会简洁明了一些。

有任何问题,欢迎大家留言!

欢迎加入我管理的Swift开发群:536353151,本群只讨论Swift相关内容。

原创文章,转载请注明出处。谢谢!

你可能感兴趣的:(【Alamofire源码解析】01 - 前言)