无法将数据从地理编码器保存到全局变量 [重复]
Posted
技术标签:
【中文标题】无法将数据从地理编码器保存到全局变量 [重复]【英文标题】:Can't save data from geocoder to global variable [duplicate] 【发布时间】:2021-10-30 11:39:42 【问题描述】:我有一个奇怪的问题。 我试图从字符串中对地址进行地理编码,它可以工作,但我只能在地理编码器函数中获取数据。我的代码:
private func getLocationFromAddress(address: String) -> CLLocationCoordinate2D
let geocoder = CLGeocoder()
var lat = CLLocationDegrees()
var long = CLLocationDegrees()
geocoder.geocodeAddressString(address) placemark, error in
if let placemark = placemark
if let lattitude = placemark.first?.location?.coordinate.latitude, let longitude = placemark.first?.location?.coordinate.longitude
lat = lattitude
long = longitude
print(lat)
else if let err = error
print(err.localizedDescription)
print(lat)
return CLLocationCoordinate2D(latitude: lat, longitude: long)
在这段代码中,当我在地理编码器内部打印变量 lat 时它可以工作,但是当我尝试在外部打印它时它是 0.0。为什么它不起作用? 控制台中还显示了前面的第二个打印。
【问题讨论】:
你听说过异步进程吗? 【参考方案1】:函数同步运行,而geocodeAddressString(_:)
是异步的。
改为使用闭包作为完成处理程序。
private func getLocationFromAddress(address: String, completionHandler: @escaping (CLLocationCoordinate2D?) -> Void)
let geocoder = CLGeocoder()
geocoder.geocodeAddressString(address) placemark, error in
if let placemark = placemark
if let lattitude = placemark.first?.location?.coordinate.latitude, let longitude = placemark.first?.location?.coordinate.longitude
let coordinate = CLLocationCoordinate2D(latitude: lattitude, longitude: longitude)
completionHandler(coordinate)
else if let err = error
print(err.localizedDescription)
completionHandler(nil)
getLocationFromAddress(address: someAddress) coordinate in
if let coordinate = coordinate
print(coordinate.latitude)
self.coordinate = coordinate
【讨论】:
以上是关于无法将数据从地理编码器保存到全局变量 [重复]的主要内容,如果未能解决你的问题,请参考以下文章