swift中比较常用的一个框架就是Alamofire,相当于OC界的AFNetworking。分析的版本是4.8.0
,因为旧版本文件比较少,刚开始分析更容易接受。先看看例子:
Alamofire.request(url)
.responseJSON { (response) in
print(response)
}
- 我们从入口开始探索,调用的方法来自于Alamofire.swift文件,作者故意写这样一个文件,是为了让用户调用方法更简易:
Alamofire.request(url)
- 进入第一层,可以看到首先创建
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
}
- 在创建
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
类,由它实现URLSessionDelegate
、URLSessionDownloadDelegate
和URLSessionStreamDelegate
协议:




SessionManager
这一层主要就是创建了URLSession
,SessionManager
其实就是一个管理者的角色。
下一章分析下一层DataRequest。
网友评论