Alamofire的三种manager

2020-03-13  本文已影响0人  醉看红尘这场梦

当我们使用下面这段代码发起一个HTTP请求时:


let requestUrl = "https://apidemo.boxue.io/alamofire"

Alamofire.request(.GET, requestUrl)

实际上,这个GET请求是通过一个Alamofire默认的manager发送的,我们可以这样读取它:


let manager = Alamofire.Manager.sharedInstance

然后,通过下面的代码发送相同的GET请求:


manager.request(.GET, requestUrl )

为什么要提到这个呢?因为Alamofire是基于NSURLSession开发的,当我们针对不同情况使用Alamofire的时候,就需要生成不同的manager。我们来看几个不同的例子:

首先是常规情况,我们用一个默认的<key style="box-sizing: border-box;">NSURLSEssionConfiguration</key>生成一个默认的manager:


class ViewController: UIViewController {
    lazy var defManager: Manager = {
        // Get additional header
        var defHeaders = Alamofire.Manager.sharedInstance
                .session
                .configuration
                .HTTPAdditionalHeaders ?? [:]

        // Set configuration
        let conf = NSURLSessionConfiguration.defaultSessionConfiguration()
        conf.HTTPAdditioinalHeaders = defHeaders

        // Generate manger
        return Alamofire.Manager(configuration: conf)
    }()

    // Omit for simplicity ...
}

从上面的代码里,我们可以看到,定义个Manager分为三步:

  1. 获取Alamofire定义的HTTP header;
  2. 设置NSURLSessionConfiguration;
  3. 生成Alamofire Manager对象;

这样我们得到的Manager和使用Alamofire默认的sharedInstance是一样的。

或者生成一个用于后台下载的manager:


class ViewController: UIViewController {
    lazy var backgroundManager: Manager = {
        // Get additional header
        var defHeaders = Alamofire.Manager.sharedInstance
                .session
                .configuration
                .HTTPAdditionalHeaders ?? [:]

        // Set configuration
        let conf = NSURLSessionConfiguration
            .backgroundSessionConfigurationWithIdentifier("io.boxue.api.background")
        conf.HTTPAdditioinalHeaders = defHeaders

        // Generate manger
        return Alamofire.Manager(configuration: conf)
    }()

    // Omit for simplicity ...
}

我们在后面的视频中讲到后台下载时,会用到这种manager。除此之外,我们还可以生成一个处理私有会话的manager:


class ViewController: UIViewController {
    lazy var ephemeralManager: Manager = {
        // Get additional header
        var defHeaders = Alamofire.Manager.sharedInstance
                .session
                .configuration
                .HTTPAdditionalHeaders ?? [:]

        // Set configuration
        let conf = NSURLSessionConfiguration.ephemeralSessionConfiguration()
        conf.HTTPAdditioinalHeaders = defHeaders

        // Generate manger
        return Alamofire.Manager(configuration: conf)
    }()

    // Omit for simplicity ...
}

在我们讲到HTTP basic authentication时,会用到这种manager。

上一篇下一篇

猜你喜欢

热点阅读