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:
参数这似乎是次优解决方案,必须有更好的方法。