Alamofire-Response底层源码分析

Alamofire-Response底层源码分析

    • 1.基础Response
    • 2.自定义Response--ResponseSerilizer
    • 3.JSON序列化器-JSONSeralizer

1.基础Response

首先我们上应用实例:

let lgResponseSerlize = DataResponseSerializer<String>.init(serializeResponse: { (request, response, data, error) -> Result<String> in
            print("---原始数据 : \(response)")
            return .success("---Request Success!")
        })

SessionManager.default
            .request(urlString)
            //1.基本response
            .response { (response) in
                print("---response:\(response)")
            }
            //2.自定义response
            .response(responseSerializer: lgResponseSerlize) { (lgDataResponse) in
                print("---lgDataResponse:\(lgDataResponse)")
                
            }
            //3.JSON序列化
            .responseJSON { (jsonResponse) in
                print("---jsonResponse:\(jsonResponse)")
        }

Response实质上是一个数据保存者、容器,存储响应信息,类似model的角色。包含
DefaultDataResponseDataResponseDefaultDownloadResponseDownloadResponse 四种结构体类型。

它们的区别

  • DefaultDataResponse:默认数据响应结构、未进行任何序列化处理;
  • DataResponse:添加序列化操作的数据响应结构;
  • DefaultDownloadResponse与DefaultDataResponse同理。

下面我们主要针对DefaultDataResponseDataResponse进行分析。
Alamofire-Response底层源码分析_第1张图片
DefaultDataResponse源码:
Alamofire-Response底层源码分析_第2张图片
DefaultDataResponse主要对数据进行整合保存,封装requestresponsedataerrortimeline等信息,然后回调给给用户使用。采用面向对象的设计原则。


对于DataRequest的序列化参数ResponseSerilizer及JSONSeralizer的分析如下:

2.自定义Response–ResponseSerilizer

通过自定义ResponseSerilizer,将返回数据进行二次封装,输出自定义格式的数据。

let lgResponseSerlize = DataResponseSerializer<String>.init(serializeResponse: { (request, response, data, error) -> Result<String> in
            print("---原始数据 : \(response)")
            return .success("---Request Success!")
        })

DataResponseSerializer
Alamofire-Response底层源码分析_第3张图片
将Result类格式的serializeResponse闭包对象赋值给self.serializeResponse

Result类:
Alamofire-Response底层源码分析_第4张图片
这样保证DataResponseSerializer能够输出任何自定义格式的数据:return .success(“Request Success!")

3.JSON序列化器-JSONSeralizer

responseJSOM:
Alamofire-Response底层源码分析_第5张图片
调用jsonResponseSerializer,传入optionsresponsedataerror等参数。
Alamofire-Response底层源码分析_第6张图片
调用ResponseSerialization的serializeResponseJSON函数:
Alamofire-Response底层源码分析_第7张图片
通过传入的optionsresponsedataerror等数据,生成序列化后的JSON数据,并通过success闭包返回。

其它类型的序列化如responseresponseDataresponseString等与responseJSON类似。

你可能感兴趣的:(Alamofire)