2

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

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

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

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

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

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

4

0 回答 0