Alamofire源码分析(1)——SessionManager

swift中比较常用的一个框架就是Alamofire,相当于OC界的AFNetworking。分析的版本是4.8.0,因为旧版本文件比较少,刚开始分析更容易接受。先看看例子:

Alamofire.request(url)
.responseJSON { (response) in
    print(response)
}
  1. 我们从入口开始探索,调用的方法来自于Alamofire.swift文件,作者故意写这样一个文件,是为了让用户调用方法更简易:
Alamofire.request(url)
  1. 进入第一层,可以看到首先创建SessionManager可以看到很多参数都是有默认值的,调用时不用填写,可以说是比OC好多了):
@discardableResult
public func request(
    _ url: URLConvertible,
    method: HTTPMethod = .get,
    parameters: Parameters? = nil,
    encoding: ParameterEncoding = URLEncoding.default,
    headers: HTTPHeaders? = nil)
    -> DataRequest
{
    return SessionManager.default.request(
        url,
        method: method,
        parameters: parameters,
        encoding: encoding,
        headers: headers
    )
}
  • 这里注意,url参数传的是URLConvertible协议类型,代表只要继承这个协议的类型都可以传进去,这样的写法就像RxSwift的一样:
public protocol URLConvertible {
    func asURL() throws -> URL
}
  1. 在创建SessionManager时处理了URLSessionConfiguration,并创建URLSession,调用commonInit完成剩下的配置:
open class SessionManager {
    ...
    public static let `default`: SessionManager = {
        let configuration = URLSessionConfiguration.default
        configuration.httpAdditionalHeaders = SessionManager.defaultHTTPHeaders

        return SessionManager(configuration: configuration)
    }()
    ...
    public init(
        configuration: URLSessionConfiguration = URLSessionConfiguration.default,
        delegate: SessionDelegate = SessionDelegate(),
        serverTrustPolicyManager: ServerTrustPolicyManager? = nil)
    {
        self.delegate = delegate
        self.session = URLSession(configuration: configuration, delegate: delegate, delegateQueue: nil)//创建URLSession

        commonInit(serverTrustPolicyManager: serverTrustPolicyManager)
    }
    ...
}
  • 这里还把代理移交给SessionDelegate,是Alamofire的NSObject类,由它实现URLSessionDelegateURLSessionDownloadDelegateURLSessionStreamDelegate协议:

SessionManager这一层主要就是创建了URLSessionSessionManager其实就是一个管理者的角色。

下一章分析下一层DataRequest。

你可能感兴趣的:(Alamofire源码分析(1)——SessionManager)