我在Swift 2.0中编写了以下函数来添加一个使用ax.add_collection(patch_collection)
plt.colorbar(patch_collection)
plt.show()
来解析给定坐标的位置名称的地图注释。我使用CLGeocoder()
块来获取已解析的位置名称,但是,在闭包完成之前,延迟块似乎已完成。为什么呢?
以下是我的代码:
defer
答案 0 :(得分:6)
你误解了延迟块的作用。
这是退出当前范围时执行的代码块。
当您使用完成块执行异步方法时,它会立即返回并继续执行到下一行。被调用的方法将完成块并保存以供日后使用。
然后您的方法完成并执行传递出方法的范围。延迟块被执行。稍后,异步方法完成它的后台工作并调用传递给它的完成处理程序。使用异步方法,在调用方法返回后始终发生。
@fqdn有正确的想法。将清理代码放在完成块中。这就是它所属的地方。
答案 1 :(得分:5)
reverseGeocodeLocation(_:completionHandler:)
以异步方式执行,在调用defer
参数时,在关闭传递之前,completionHandler
块中的代码正在执行是有意义的
是否有理由不能将defer
块中的代码移入完成处理程序?