繁体   English   中英

我的 Swift 应用程序完成处理程序似乎不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM