😊😊😊Alamofire专题目录,欢迎及时反馈交流 😊😊😊json
Alamofire 目录直通车 --- 和谐学习,不急不躁!api
Alamofire
请求数据以后,咱们就会回调响应,可是底层是如何保证响应必然在请求以后的呢?以及Alamofire
的Response
究竟是什么东西,这一篇详细讲解。安全
首先咱们先来看这段代码网络
SessionManager.default
.request(urlString)
.response { (response) in
print(response)
}
复制代码
Alamofire
一个很是关键的类就是 Request
,请看下面这段代码是链式调用,可是怎么保证 response
在 request
以后呢?闭包
response
的任务是加入到了 delegate.queue.addOperation
response
是给用户对外提供的,用户能够直接UI操做init(task: URLSessionTask?) {
_task = task
self.queue = {
let operationQueue = OperationQueue()
operationQueue.maxConcurrentOperationCount = 1
operationQueue.isSuspended = true
operationQueue.qualityOfService = .utility
return operationQueue
}()
}
复制代码
response
分为四种并发
这里能够看到并无 upload
相关的,为何?😕那是由于 upload
返回的就是普通数据,就没有必要从新封装。post
其中 Default
开头就是返回原始数据,没有进过其余处理,不加 Default
能够经过序列化器处理!你们能够对比下面两个方法,不可贵出结果学习
Response
和咱们传统的 Response
不是同一个。里封装 Response
是一个数据储存模型 ,里面保存对外所须要的数据self.request = request
self.response = response
self.data = data
self.error = error
self.timeline = timeline
复制代码
就拿咱们最熟悉的 json
序列化器来给你们一块儿讨论ui
public func responseJSON( queue: DispatchQueue? = nil, options: JSONSerialization.ReadingOptions = .allowFragments, completionHandler: @escaping (DataResponse<Any>) -> Void)
-> Self
{
return response(
queue: queue,
responseSerializer: DataRequest.jsonResponseSerializer(options: options),
completionHandler: completionHandler
)
}
复制代码
response
的方法public static func jsonResponseSerializer( options: JSONSerialization.ReadingOptions = .allowFragments)
-> DataResponseSerializer<Any>
{
return DataResponseSerializer { _, response, data, error in
return Request.serializeResponseJSON(options: options, response: response, data: data, error: error)
}
}
复制代码
DataResponseSerializer
类型的序列化器Result
: Request.serializeResponseJSON
DataResponseSerializer
的参数闭包的调用: DataRequest.jsonResponseSerializer(options: options)
public static func serializeResponseJSON( options: JSONSerialization.ReadingOptions, response: HTTPURLResponse?, data: Data?, error: Error?)
-> Result<Any>
{
// 省略了一些不重要的代码
do {
let json = try JSONSerialization.jsonObject(with: validData, options: options)
return .success(json)
} catch {
return .failure(AFError.responseSerializationFailed(reason: .jsonSerializationFailed(error: error)))
}
}
复制代码
json
序列化器: JSONSerialization.jsonObject
.success(json)
或者 .failure(error)
taskDelegate
里面的数据 -> 传到咱们外界的闭包 - 交给咱们自定义的序列或者系统帮咱们实现的序列化器实现response
验证 - response.statusCode
判断 - 发出 result
result
就是咱们的序列化器的返回值operation
把 result
交给 response
结构体data/downloadResponse
储存数据response回调
返回 response响应数据
很是高兴咱们霸占了掘金
RxSwift ,Alamofire
板块,只要搜索RxSwift ,Alamofire
相关最新文章必然都是一些熟悉的身影~~~ 持续努力,变平凡为非凡 💪 💪 💪url就问此时此刻还有谁?45度仰望天空,该死!我这无处安放的魅力!