【发布时间】:2019-11-17 12:08:07
【问题描述】:
我有一个位置列表(大约 30 个元素):
var locations: [CLLocation] = [
CLLocation(latitude: 45.471172, longitude: 9.163317),
...
]
我的目的是从该列表中获取街道名称,因此我决定使用CLGeocoder()。
我在viewDidLoad() 中调用了一个函数,每个位置都由lookUpCurrentLocation() 处理。
override func viewDidLoad() {
super.viewDidLoad()
for location in locations {
lookUpCurrentLocation(location: location, completionHandler: { streetName in
print(streetName)
})
}
}
func lookUpCurrentLocation(location: CLLocation, completionHandler: @escaping (String?) -> Void) {
CLGeocoder().reverseGeocodeLocation(location, completionHandler: { (placemarks, error) in
let placemark = placemarks?[0]
completionHandler(placemarks?[0].name)
})
}
我的问题: 当应用程序启动时,它会打印一个 nil 列表或仅打印前两个 nil 和其他街道名称。
我希望看到整个列表在没有任何 nil 的情况下得到处理。 有什么提示吗?
【问题讨论】:
-
尝试打印您的错误
print(error)在发起反向地理编码请求后,不要尝试发起另一个反向或正向地理编码请求。每个应用程序的地理编码请求都有速率限制,因此在短时间内发出过多请求可能会导致某些请求失败。当超过最大速率时,地理编码器会将值为 CLError.Code.network 的错误对象传递给您的完成处理程序。 -
@LeoDabus 谢谢,它打印了我:Error Domain=kCLErrorDomain Code=2 (null)
-
代码 2 是
CLError.Code.network.rawValue。
标签: swift cllocation clgeocoder