如何更改默认请求完成队列?
How to change default request completion queue?
我正在做一个有很多 API 的应用程序,每个 API 的响应都必须导入到核心数据中。我知道 Alamofire 完成处理程序默认在主线程中。我想将其更改为后台线程,因为我会在请求完成时执行核心数据导入操作。你能指导我如何在请求完成时将我的后台线程设置为默认线程吗?
我讨厌在每个 API 请求中设置它,相反,我想像我在 AFNetworking 中经常做的那样在一个地方设置它,AFNetworking 属性 调用了 completionQueue 在 AFHTTPSessionManager 中,所以我为 AFHTTPSessionManager 创建了子类,然后我轻松地更改了默认线程。我在 Alamofire 中没有找到类似的东西。请指导我更好的解决方案
Almofire 不提供更改完成队列的方法。但是您可以扩展 Request
class 并添加自定义响应方法:
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)
}
}
这样就不用每次都指定自定义队列了。
我正在做一个有很多 API 的应用程序,每个 API 的响应都必须导入到核心数据中。我知道 Alamofire 完成处理程序默认在主线程中。我想将其更改为后台线程,因为我会在请求完成时执行核心数据导入操作。你能指导我如何在请求完成时将我的后台线程设置为默认线程吗?
我讨厌在每个 API 请求中设置它,相反,我想像我在 AFNetworking 中经常做的那样在一个地方设置它,AFNetworking 属性 调用了 completionQueue 在 AFHTTPSessionManager 中,所以我为 AFHTTPSessionManager 创建了子类,然后我轻松地更改了默认线程。我在 Alamofire 中没有找到类似的东西。请指导我更好的解决方案
Almofire 不提供更改完成队列的方法。但是您可以扩展 Request
class 并添加自定义响应方法:
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)
}
}
这样就不用每次都指定自定义队列了。