保存并重新发送Alamofire请求

时间:2018-10-28 14:29:19

标签: ios swift xcode httprequest alamofire

我正在使用Alamofire,我想发送获取请求。如果失败,我想在执行一些其他操作后重试。

我将请求保存在变量中:

let myRequest = Alamofire.request("myurl", method: .get)

和另一个功能:

func retry(request:DataRequest) {
   request.responseSwiftyJSON { response in
      // ... code to handle the response ...
   }
}

这样,我可以多次调用retry函数,并传递相同的对象myRequest。

但是,只有第一次才正确发送了请求,然后我认为它已被缓存(或以某种方式,Alamofire对象意识到请求对象的响应字段已经有效),并且该请求不再发送给服务器。

为解决此问题,我尝试以这种方式更改重试功能:

func retry2(request:DataRequest) {
   Alamofire.request(request.request!).responseSwiftyJSON { response in
      // ... code to handle the response ...
   }
}

这应该仅使用已保存请求的URLRequest字段初始化一个新的Alamofire请求,但是现在该请求每次被调用两次! (我在后端检查它,并且确定这是使用此方法引起的。)

是否可以重新发送原始保存的请求? Alamofire是否可以通过某种方式从已保存的请求中初始化新请求?

解决方案

最后我做了类似@JonShier和@DuncanC的建议:

struct APIRequest {

let url: URLConvertible
let method: HTTPMethod
let parameters: Parameters?
let encoding: ParameterEncoding
let headers: HTTPHeaders?

init(_ url:URLConvertible, method:HTTPMethod = .get, parameters:Parameters? = nil, encoding:ParameterEncoding =  URLEncoding.default, headers:HTTPHeaders? = nil) {
    self.url = url
    self.method = method
    self.parameters = parameters
    self.encoding = encoding
    self.headers = headers
}

func make() -> DataRequest {
    return Alamofire.request(url, method: method, parameters: parameters, encoding: encoding, headers: headers)
}

}

1 个答案:

答案 0 :(得分:2)

我还没用过AlamoFire,而最少的使用是在几年前。

环顾AlamoFire代码,似乎request()函数返回一个DataRequest对象。此外,看起来DataRequest是一种引用类型,旨在跟踪对服务器的特定请求及其响应。

看起来就像创建了一个之后,就使用它直到它完成或失败,然后将其丢弃。似乎不打算将它们重用于相同类型的后续请求。

总结:

问题:“如何重用AlamoFire DataRequest对象。”
答案:“不要那样做。”