gpt4 book ai didi

ios - 在恢复之前修改 Alamofire 请求的 header ()d

转载 作者:搜寻专家 更新时间:2023-10-31 22:49:06 25 4
gpt4 key购买 nike

我正在创建 Alamofire 请求,并将 startRequestsImmediately 设置为 false。然后我将一个 block 排入一个 NSOperationQueue 队列,它根据请求调用 resume() 。如果我需要暂停传出请求,我只需暂停队列并让它们缓冲起来。一旦我取消挂起队列,所有请求都会被分派(dispatch)。

有时,当队列暂停时,我需要更改其中任何现有请求的 header (例如授权 token )。我还没有找到执行此操作的方法(我尝试的任何操作都没有生效)。 NSURLSessionTask 有可能吗?是否可以为给定请求(使用更新的 header )换出 NSURLSessionTask?

最佳答案

一旦创建了 Alamofire.Request,它就会在后台创建一个 NSURLSessionTask,一旦创建,它实际上是只读的。因此,我发现的唯一选择是将 Request 的创建推迟到我的请求即将运行时。

但是,Request 对象是您设置响应处理程序的对象。例如,客户端想要调用如下内容:request().response(...).response(...)。 Alamofire 的 request() 返回 Request 对象,您可以在该对象上多次调用 response() 以设置将运行一次的响应处理程序请求完成。但是,如果您需要推迟 Request 的创建,直到您知道它即将运行 - 这样您就可以在那个时候使用最新的 header - 您如何将它返回给客户,以便他们可以在上面调用 .response()

我这样做的方法是在我的上创建一个 myRequest() 包装器(而不是能够覆盖实际的 request() 函数/名称) Alamofire.Manager 派生类,它带有 1 个额外参数 - 一个“请求就绪” block (它本身带有一个 Alamofire.Request),而不是返回 来自 myRequest() 的请求myRequest(),不返回任何内容,但调用 block (将 Request 传递给它)就像请求即将被发送。

有点像

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

反而变成了

manager.myRequest(.GET, "endpoint") { request in
request.responseJSON(...)
}

通过这种方式,我可以推迟 Alamofire.Request 的创建(它会立即创建底层 NSURLSessionTask 并在当时锁定 header )直到稍后,同时不会给客户带来太多不便,因为他们如何指定响应处理程序。

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

func myRequest(
method: Alamofire.Method,
_ URLString: URLStringConvertible,
parameters: [String: AnyObject]? = nil,
encoding: ParameterEncoding = .URL,
headers: [String: String]? = nil,
requestReady: ((Request) -> Void)?) {

pendingRequestsQueue.addOperationWithBlock { [weak self] in
if let strongSelf = self {
let request = strongSelf.request(method, URLString, parameters: parameters, encoding: encoding, headers: headers)

if let requestReady = requestReady {
requestReady(request)
}

request.resume()
}
}
}

关于ios - 在恢复之前修改 Alamofire 请求的 header ()d,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32384309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com