[英]My Completion Handler for a Swift App Doesn't Seem to Work
我正在使用此处找到的方法将街道地址转换为坐标点。 我的完成处理程序成功后,应该将坐标点添加到我已经初始化的列表中,但是当我进入调试模式时,完成处理程序被完全忽略,导致索引超出范围错误。 我想我的完成处理程序有问题,可以在下面找到:
func setUp() {
for a in addresses {
print(a)
getCoordinate(address: a, completionHandler: {coord , error in
if error == nil {
items.append(Location(coordinate: CLLocationCoordinate2D(latitude: coord.latitude, longitude: coord.longitude), address: a))
print("resulting coordinate = (\(coord.latitude),\(coord.longitude))")
} else {
print(error as Any)
}
})
}
}
总而言之,当我去调试这个问题时,调试器会到达代码片段中的第 4 行,然后跳过函数的其余部分。 谢谢你的帮助!
这就是异步代码的工作原理。 您进行调用,并将其传递给完成处理程序。 函数调用立即返回。 在未来的某个日期, aysnc 函数完成其工作,然后调用您的完成处理程序。
把它想象成让你的孩子跑到商店买一些你完成晚餐所需的原料。 你把清单发给你的孩子,让他们在路上,然后回去做剩下的晚餐。 当他们回来时,经过不可预知的延迟,他们告诉你他们有东西(调用你的完成处理程序),然后你拿走他们给你的项目(你的完成处理程序可以从异步函数中获取参数。)
如果您在完成处理程序中、在函数调用中以及在函数调用之后设置断点,您将看到调试器首先命中函数调用,然后是函数调用后断点,然后在以后的某个时间将看到它击中完成处理程序代码的断点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.