Alamofire 源码解析

Alamofire 浅析 <五> 使用Operati

2018-09-07  本文已影响3人  狼性刀锋

response使用示例:


        let urlString = "https://invalid-url-here.org/this/does/not/exist"
        SessionManager.default.request(URL.init(string: urlString)!)
            .responseData { result in
                print("\(result)")
        }

// response  core code
    @discardableResult
    public func response<T: DataResponseSerializerProtocol>(
        queue: DispatchQueue? = nil,
        responseSerializer: T,
        completionHandler: @escaping (DataResponse<T.SerializedObject>) -> Void)
        -> Self
    {
        delegate.queue.addOperation {
            let result = responseSerializer.serializeResponse(
                self.request,
                self.response,
                self.delegate.data,
                self.delegate.error
            )

            var dataResponse = DataResponse<T.SerializedObject>(
                request: self.request,
                response: self.response,
                data: self.delegate.data,
                result: result,
                timeline: self.timeline
            )

            dataResponse.add(self.delegate.metrics)

            (queue ?? DispatchQueue.main).async { completionHandler(dataResponse) }
        }

        return self
    }
    
  // DownloadResponseSerializerProtocol
  
  public protocol DownloadResponseSerializerProtocol {
    /// The type of serialized object to be created by this `DownloadResponseSerializerType`.
    associatedtype SerializedObject

    /// A closure used by response handlers that takes a request, response, url and error and returns a result.
    var serializeResponse: (URLRequest?, HTTPURLResponse?, URL?, Error?) -> Result<SerializedObject> { get }
}
    
  let result = responseSerializer.serializeResponse(
                self.request,
                self.response,
                self.delegate.data,
                self.delegate.error
            )

result 是一个闭包,只有这个闭包在执行的时候才会获取self.request的值,这样相比传统的直接赋值的好处在于,如果self.request更新了,闭包执行的时候永远是获取最新的request值。

上一篇 下一篇

猜你喜欢

热点阅读