暂停并恢复for循环

时间:2015-05-17 15:58:23

标签: ios swift for-loop

我需要一些方法来暂停和恢复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
        }

如何在swift中停止和恢复循环,还是有其他方法可以停止?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

你可以循环使用&#39;通过反复调用执行&#39;循环体的功能。如果您不打电话给该功能,那么您可以有效地暂停&#39 ;;当你打电话给这个功能时,那么'&#39;循环&#39;再次迭代。像这样:

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)