是否还需要用于验证异步请求的标准模式?

时间:2015-05-19 00:08:47

标签: multithreading swift mobile closures

在移动应用程序应用程序中,我们不能(或不应该)在主线程上发出网络请求。我们通常通过回调或在结果可用时在主线程上执行的闭包来获取请求的结果。由于用户可能已经移动或者结果可能不再需要,例如它可能是无序到达的旧请求,我们需要检查回调或闭包中的动作是否应该基于当前状态实际执行该应用程序。

在iOS和swift的情况下,我计划使用闭包,所以我想为每个请求做一些这样的事情。

假设我有一个看起来像这样的方法

func makeRequest(identifier: String, handler: (ident: String, result: ResultObject) -> Void) {
...
...
handler(identifier, result)
}

除了在结果可用时将被调用的处理程序之外,我将传入一个标识符的值,该标识符将在调用时传递给处理程序。闭包将在创建请求时捕获对标识符的引用,因此它能够在实际调用处理程序时获取引用所持有的值。所以它看起来像这样,其中ident是commandIdentifier在发出请求时的值,而闭包内的commandIdentifier将是闭包实际执行时的值。

commandIdentifer = "some unique identifier"
makeRequest(commandIdentifer) { ident, result in
  if commandIdentifier == ident {
      // do something
  } else {
      // do something else
  }
}

我认为这里没有什么特别的,所以我的问题是:

这是一般模式,如果是,我在哪里可以找到任何文件?

如果有一些创建标识符的常规方法以及如何在主线程中关联其引用,我特别感兴趣。

此外,如果我完全错了,这不是一个好方法,我也希望听到这个

1 个答案:

答案 0 :(得分:1)

之前我几乎使用过这种方法。我使用整数标识符,并在发出新请求时递增它。这样,如果待处理的请求被新的请求取代,您可以在场内删除陈旧的响应。