如何更改默认请求完成队列?

Posted

技术标签:

【中文标题】如何更改默认请求完成队列?【英文标题】:How to change default request completion queue? 【发布时间】:2016-06-21 07:38:43 【问题描述】:

我正在做一个有许多 API 的应用程序,每个 API 的响应都必须导入到核心数据中。我知道默认情况下 Alamofire 完成处理程序将在主线程中。我想将其更改为后台线程,因为我将在请求完成中执行核心数据导入操作。你能指导我如何在请求完成中将我的后台线程设置为默认线程吗?

我讨厌在每个 API 请求中设置它,相反我想像我在 AFNetworking 中所做的那样在一个地方设置它,它在 AFHTTPSessionManager中有名为 completionQueue 的属性> 所以我为 AFHTTPSessionManager 创建了子类,然后我轻松更改了默认线程。我在 Alamofire 中找不到类似的东西。请指导我更好的解决方案

【问题讨论】:

【参考方案1】:

Almofire 不提供更改完成队列的方法。但是您可以扩展Request 类并添加自定义响应方法:

   extension Request 

     public func responseOnCustomQueue(completionHandler: (NSURLRequest?, NSHTTPURLResponse?, NSData?, NSError?) -> Void) -> Self 
       let queue = dispatch_get_main_queue() // custom queue for all requests
       return self.response(queue: queue, completionHandler: completionHandler)
     
   

这样您不必每次都指定自定义队列。

【讨论】:

以上是关于如何更改默认请求完成队列?的主要内容,如果未能解决你的问题,请参考以下文章

J2me 使用更改的 ListModel 更新容器列表

laravel队列

如何在 Swift 中更改键盘完成按钮上 Textfield 的文本?

最后一个请求完成后发送下一个请求

如何删除 vuetify 自动完成组件默认图标

延迟Rxjs BehaviorSubject机制