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分为三步:
- 获取Alamofire定义的HTTP header;
- 设置NSURLSessionConfiguration;
- 生成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。