重新授权后重试NSURLSessionDataTask请求(在Swift中等效的AKA NSInvocation)

时间:2015-01-14 16:08:35

标签: rest swift nsurlsession nsinvocation nsurlsessiondatatask

TL; DR版本:与NSInvocation最接近的等价物 - 或类似的方法来打包方法调用,包括参数 - 在Swift中?

背景:我有一个ServerController对象,可以在我的应用中用来向API发出请求。魔法发生在这种方法中:

    private func makeRequestWithPath(
            path: String,
            method: String = "GET",
            body: NSData? = nil,
            successBlock: (AnyObject?) -> Void) {  
// ...
            self.urlSession.dataTaskWithRequest(request,
               completionHandler: { (data, resp, error) -> Void in

                 if let httpResp = resp as? NSHTTPURLResponse {

                     switch httpResp.statusCode {

                         case 200:
                             successBlock(/* pass process response in here */)

                         case 401:
                             self.postNotificationOnMainThread(kAppTokenRefreshRequiredNotification)

// ...
            }.resume()

定期API请求失败,401会在应用程序中作为通知进行广播,因为许多方对请求需要更长时间的事实感兴趣。另一个API请求用于刷新应用令牌,然后其他API请求再次开始工作。

这是我需要帮助的部分: 我需要在重新授权后重复原始API请求

以前在Objective-C中我可能使用NSInvocation对象来打包原始方法调用,但这在Swift中不可用,因此我认为必须有更像Swift的做法。但是我还没有设法弄明白。

到目前为止,我提出的最佳方法是:

  • 将参数以及对ServerController的引用放入字典中,并将其作为object:参数
  • 传递给通知
  • 在通知观察者中(完成重新授权后),将参数拉出字典并再次手动调用相同的方法重复请求

这似乎是次优解决方案,必须有更好的方法。

0 个答案:

没有答案