Alamofire 关于Response的思考

Alamofire 关于Response的思考。

你好,我是Emma,今天我们开启对Alamofire 关于Response的思考。主要的思考方向以下方示例为切入点。

示例:

SessionManager.default.request(urlString)
    //默认的请求
    .response(completionHandler: { (dataResponse) in
        dataResponse.response
    })
    //自定义序列化的请求
    .response(responseSerializer: DataResponseSerializer<String>.init(serializeResponse: { (request, response, data, error) -> Result<String> in
        print("原始数据:\(response)")
        return .success("成功啦")
    })) { (dataResponse) in
         print(dataResponse)
    }
    //系统封装过的序列化请求
    .responseJSON { (jsonResponse) in
        print(jsonResponse)
}

###1.Alamofiren中Response这个角色的作用是什么?
首先在查看源码之前,通过上面的代码我们思考一下,我们认为的Response是用来做什么的?这时候我们很有可能由于使用Alamofire的惯性会认为这个Response的作用是解析result中返回的数据的。这个观点我们用代码验证并订正。
进入Response方法:

1.Response返回的是一个闭包,闭包的参数是DefaultDataResponse,这个包相当于是`{ (lgDataResponse) in
        lgDataResponse
    }`这个包的处理。
2.添加异步请求队列
`delegate.queue.addOperation {}`
3.返回主线程
`(queue ?? DispatchQueue.main).async {}`
4.创建对象
`var dataResponse`
5.该对象的来源:源方法的声明,方法中的属性,属性的调用,属性的初始化等函数方法的具体下层操作。
//DefaultDataResponse是一个总的结构体,里面保存了很多属性,那么思考这些属性的数据是从什么地方来的呢?
DefaultDataResponse(
                request: self.request,
                response: self.response,
                data: self.delegate.data,
                error: self.delegate.error,
                timeline: self.timeline
            )
总结从上面可以看出Response作用典型的是存储,更像model一些。

###2.Alamofiren中Response保存了什么?

@discardableResult
public func response(queue: DispatchQueue? = nil, completionHandler: @escaping (DefaultDataResponse) -> Void) -> Self {
    delegate.queue.addOperation {
        (queue ?? DispatchQueue.main).async {
            var dataResponse = DefaultDataResponse(
                request: self.request,
                response: self.response,
                data: self.delegate.data,
                error: self.delegate.error,
                timeline: self.timeline
            )

            dataResponse.add(self.delegate.metrics)

            completionHandler(dataResponse)
       
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值