CLLocation列表中的地方/城市名称

时间:2016-10-21 18:14:49

标签: ios swift cllocation reverse-geocoding

这是我的情况。 (使用Swift 2.2)

我有一个坐标列表(CLLocation)。我需要致电reverseGeocodeLocation来获取相应的地方/城市。如果我尝试遍历这些元素,那么有些呼叫可能会失败,因为Apple建议在一秒钟内发送一个呼叫。所以我需要在每次调用之间添加一个延迟。

有没有办法实现这个目标?任何帮助表示赞赏。

(如果我们有多个具有相同lat的项目,很长一段时间我们只调用api一次)

1 个答案:

答案 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或更早版本,请使用选择器版本,它的工作方式相同。