在Alamofire请求恢复()之前修改标头

时间:2015-09-03 19:51:32

标签: ios swift alamofire

我正在创建Alamofire请求,startRequestsImmediately设置为false。然后我将一个块排入NSOperationQueue,该请求在请求上调用resume()。如果我需要暂停传出请求,我只需暂停队列并让它们缓冲。一旦我取消挂起队列,就会调度任何请求。

有时,当队列被暂停时,我需要更改其中任何现有请求的标头(例如授权令牌)。我还没有办法做到这一点(我尝试的任何事情都没有生效)。是否可以使用NSURLSessionTask?是否可以替换给定请求的NSURLSessionTask(使用更新的头文件)?

1 个答案:

答案 0 :(得分:2)

创建Alamofire.Request后,它会立即创建一个NSURLSessionTask,一旦创建,它就是有效的只读。因此,我发现的唯一选择是推迟创建Request,直到我的请求即将运行。

但是,Request对象是您设置响应处理程序的对象。例如,客户希望调用类似:request().response(...).response(...)的内容。 Alamofire的request()返回Request对象,您可以多次调用response()对象,以便设置响应处理程序,该请求将在请求完成后运行。但是如果您需要推迟创建Request,直到您知道它将要运行 - 这样您就可以使用当时的最新标题 - 如何将其返回给客户端以便他们可以调用{{ 1}}吗?

我这样做的方法是在我的.response()派生类上创建一个myRequest()包装器(而不是能够覆盖实际的request()函数/名称),需要一个额外的参数 - 一个'请求就绪'块(它本身需要一个Alamofire.Manager)而不是从Alamofire.Request返回RequestmyRequest(),不返回任何内容,而是调用正如请求即将被分派一样,阻止(传递myRequest())。

类似

Request

而是变成

manager.request(.GET, "endpoint").responseJSON(…)

通过这种方式,我可以推迟创建manager.myRequest(.GET, "endpoint") { request in request.responseJSON(...) } (立即创建基础Alamofire.Request并锁定标题,因为它们在那一刻)直到以后,同时不会给客户带来太多不便他们如何指定响应处理程序。

NSURLSessionTask看起来像这样(不包括特定于应用的内容):

myRequest()