作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一组对象都需要验证。验证需要使用闭包。
我知道闭包可以随时完成,因此 for 循环将在所有闭包之前完成。所以在 for 循环之后放类似 reloadData 的东西是行不通的。
那么,对于每个经过循环的对象,了解所有闭包代码何时完成的好方法是什么?
我可以在闭包中调用 reloadData 并一次更新一个数据 - 但宁愿在它们全部完成后才这样做。
我的代码
for aClient in passedPossible {
let geocoder = CLGeocoder()
geocoder.geocodeAddressString(aClient[address], completionHandler: { (placemarks, error) -> Void in
if let placemarks = placemarks as? [CLPlacemark] {
// found it do stuff
}
else {
// do stuff as cannot find
}
})
}
// how to reload at the end of the for loop
self.tableView.reloadData()
最佳答案
我建议对每个地理编码回调使用 tableView.reloadRowsAtIndexPaths。
但是如果您必须使用 reloadData(),最简单的解决方案是计算您的地理编码作业以防止重新进入。
例子:
var loading = false
@IBAction func
Do( sender: AnyObject ) {
if !loading {
loading = true
var w = 0
for i in 0 ..< 10 {
dispatch_async( dispatch_get_main_queue() ) {
println( i )
if ++w == 10 {
self.loading = false
println( "It's time to call reloaddata!" )
}
}
}
}
}
编辑:
如何附加工作 ID 之类的内容并将其放入列表中?
var jobIDs: [ Int ] = []
@IBAction func
Do( sender: AnyObject ) {
if jobIDs.count == 0 {
for theJobID in 0 ..< 10 {
jobIDs.append( theJobID )
dispatch_async( dispatch_get_main_queue() ) {
println( "Doing job:\(theJobID)" )
self.jobIDs.removeAtIndex( find( self.jobIDs, theJobID )! )
if self.jobIDs.count == 0 {
println( "It's time to call reloaddata!" )
}
}
}
}
}
您可以使用“aClient”作为作业 ID。
关于ios - For Loop Swift 中的闭包完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29838691/
我是一名优秀的程序员,十分优秀!