Alamofire 源码学习(四)- Alamofire.swift


 原文链接     by: song4

可以说,Alamofire.swift 是整个库的窗口,它定义了大部分公有接口和类型。拆解开来看,这个文件所包含的内容不多,仅有三项而已:

  1. 两个协议:URLStringConvertibleURLRequestConvertible
  2. 一个快捷函数:URLRequest()
  3. 一组请求方法: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 }
}

下列类型实现了该协议:StringNSURLNSURLComponentsNSURLRequest

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 类的同名方法完成的。

相关代码:

Alamofire