我需要一些方法来暂停和恢复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中停止和恢复循环,还是有其他方法可以停止?
答案 0 :(得分:3)
不要认为它是暂停循环,将循环视为构建需要管理的事物的数量,然后管理在循环完成后何时完成这些事情。
您应该在循环中创建NSOperation
个实例,并将它们添加到NSOperationQueue
,而不是直接在循环中执行您的URL连接。您可以suspend
和resume
排队,也可以设置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)