Rest 重新授权后重试NSURLSessionDataTask请求(在Swift中称为NSInvocation等效)

Rest 重新授权后重试NSURLSessionDataTask请求(在Swift中称为NSInvocation等效),rest,swift,nsurlsession,nsinvocation,nsurlsessiondatatask,Rest,Swift,Nsurlsession,Nsinvocation,Nsurlsessiondatatask,TL;DR版本:在Swift中,与NSInvocation或类似的打包方法调用(包括参数)最接近的等效方法是什么 背景:我有一个ServerController对象,它在我的应用程序中用于向API发出请求。这种方法的神奇之处在于: private func makeRequestWithPath( path: String, method: String = "GET", body: NSData? = nil,

TL;DR版本:在Swift中,与
NSInvocation
或类似的打包方法调用(包括参数)最接近的等效方法是什么

背景:我有一个
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失败,401作为通知在应用程序中广播,因为许多方都对请求将花费更长的时间这一事实感兴趣。另一个API请求用于刷新应用程序令牌,然后其他API请求再次开始工作

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

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

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

  • 将参数以及对
    ServerController
    的引用放入字典中,并将它们作为
    对象:
    参数传递到通知中
  • 在notification observer中(完成重新授权后),从字典中取出参数,并再次手动调用相同的方法以重复请求
这似乎是一个次优的解决方案,必须有更好的方法