美文网首页
Alamofire的三种manager

Alamofire的三种manager

作者: 醉看红尘这场梦 | 来源:发表于2020-03-13 10:09 被阅读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。

    相关文章

      网友评论

          本文标题:Alamofire的三种manager

          本文链接:https://www.haomeiwen.com/subject/olzejhtx.html