可以说,Alamofire.swift 是整个库的窗口,它定义了大部分公有接口和类型。拆解开来看,这个文件所包含的内容不多,仅有三项而已:
- 两个协议:
URLStringConvertible
与URLRequestConvertible
; - 一个快捷函数:
URLRequest()
; - 一组请求方法:
request()/upload()/download()
。
两个协议
URLStringConvertible
实现了该协议的类型可以用来构造网络请求的 URL。其定义如下:
/**
Types adopting the `URLStringConvertible` protocol can be used to construct URL strings, which are then used to
construct URL requests.
*/
public protocol URLStringConvertible {
/**
A URL that conforms to RFC 2396.
Methods accepting a `URLStringConvertible` type parameter parse it according to RFCs 1738 and 1808.
See https://tools.ietf.org/html/rfc2396
See https://tools.ietf.org/html/rfc1738
See https://tools.ietf.org/html/rfc1808
*/
var URLString: String { get }
}
下列类型实现了该协议:String
、NSURL
、NSURLComponents
与 NSURLRequest
。
URLRequestConvertible
实现了该协议的类型可以用来构造 NSMutableURLRequest
的实例。其定义如下:
/**
Types adopting the `URLRequestConvertible` protocol can be used to construct URL requests.
*/
public protocol URLRequestConvertible {
/// The URL request.
var URLRequest: NSMutableURLRequest { get }
}
NSURLRequest
实现了该协议。
一个快捷函数
函数 URLRequest()
用于快速拼装 NSMutableURLRequest
的实例。其声明如下:
func URLRequest(
method: Method,
_ URLString: URLStringConvertible,
headers: [String: String]? = nil)
-> NSMutableURLRequest
一组请求方法
前文已经说过,Alamofire 支持三种类型的网络请求,分别是:普通请求,下载请求,上传请求。针对每一种请求,Alamofire.swift 均提供了若干接受不同参数的重载方法。另外,需要提及的一点是,Alamofire.swift 只关心接口暴露,不关心也不应该关心逻辑实现,以 request()
方法为例:
public func request(URLRequest: URLRequestConvertible) -> Request {
return Manager.sharedInstance.request(URLRequest.URLRequest)
}
可以看出,该接口仅仅提供了一层简易的封装,真正的逻辑实现实际上是由 Manager
类的同名方法完成的。