这是我的情况。 (使用Swift 2.2)
我有一个坐标列表(CLLocation
)。我需要致电reverseGeocodeLocation
来获取相应的地方/城市。如果我尝试遍历这些元素,那么有些呼叫可能会失败,因为Apple建议在一秒钟内发送一个呼叫。所以我需要在每次调用之间添加一个延迟。
有没有办法实现这个目标?任何帮助表示赞赏。
(如果我们有多个具有相同lat的项目,很长一段时间我们只调用api一次)
答案 0 :(得分:2)
此代码声明了一组位置并逐个查找,请求之间至少有1秒:
var locations = Set<CLLocation>()
func reverseGeocodeLocation() {
guard let location = locations.popFirst() else {
geocodingDone()
return
}
CLGeocoder().reverseGeocodeLocation(location) { placemarks, error in
//Do stuff here
//Dispatch the next request in 1 second
_ = Timer.scheduledTimer(withTimeInterval: 1, repeats: false) { _ in
self.reverseGeocodeLocation()
}
}
}
func geocodingDone() {
//Put your finish logic in here
}
仅供参考我使用了Timer的块语法,但这仅适用于iOS 10.如果您使用的是iOS 9或更早版本,请使用选择器版本,它的工作方式相同。