【问题标题】:Pause and Resume a for Loop暂停和恢复 for 循环
【发布时间】:2015-05-18 00:09:36
【问题描述】:

我需要一些方法来暂停和恢复for 循环。我有这个代码:

for (var i = 0; i < paramsArray.count; i++) {
            var stringResponse: String!
            var urlString: String
            if paramsArray[i].arduinoHTTPPort == 80 {
                urlString = String(format: "http://%@/arduino/%@/%i/", arguments: [paramsArray[i].arduinoAddress, paramsArray[i].pinType.lowercaseString, paramsArray[i].arduinoPin])
            } else {
                urlString = String(format: "http://%@:%i/arduino/%@/%i/", arguments: [paramsArray[i].arduinoAddress, paramsArray[i].arduinoHTTPPort, paramsArray[i].pinType.lowercaseString, paramsArray[i].arduinoPin])
            }
            let url = NSURL(string: urlString)
            let request = NSURLRequest(URL: url!)
            NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) {(response, data, error) in
                println(NSString(data: data, encoding: NSUTF8StringEncoding))
                stringResponse = NSString(data: data, encoding: NSUTF8StringEncoding) as! String
                //Need to resume loop here
            }
            //Need to stop loop here
        }

如何快速停止和恢复循环,或者有没有其他方法可以做到这一点?

【问题讨论】:

  • 你想完成什么?为什么需要暂停这个循环?
  • 整个方法更新UITableView。当设备收到来自服务器的响应时,应逐步更新每个单元格。

标签: ios swift for-loop


【解决方案1】:

不要将其视为暂停循环,将循环视为构建您需要管理的事情的数量,然后在循环完成后管理这些事情何时完成。

您应该在循环中创建NSOperation 实例并将它们添加到NSOperationQueue,而不是直接在循环中执行您的URL 连接。您可以suspendresume 队列,还可以设置maxConcurrentOperationCount,这样您就可以限制一次加载的连接数。

【讨论】:

    【解决方案2】:

    您可以通过重复调用执行“循环”主体的函数来“循环”。如果您不调用该函数,那么您实际上是“暂停”;当您调用该函数时,“循环”将再次迭代。像这样:

    let body = { (i:Int) -> Void in
      if i < paramsArray.count {
        // Lots of stuff, and then
        NSURLConnection.sendAsynchronousRequest () {
          // Lots more stuff, and then
          body (i + 1)
        }
      }
    }
    
    body (0)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多