swift - 无法将数据从地理编码器保存到全局变量
问题描述
我有奇怪的问题。我试图从字符串中对地址进行地理编码,它可以工作,但我只能在地理编码器函数中获取数据。我的代码:
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。为什么它不起作用?第二个打印件也较早地出现在控制台中。
解决方案
函数同步运行,whilegeocodeAddressString(_:)
是异步的。改为使用闭包作为完成处理程序。
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
}
}
推荐阅读
- xss - 跨站点脚本 (XSS) 查找目标的确切有效负载
- reactjs - 无法在我的 Jest 测试文件中导入模块
- apache-kafka - Kafka Mirror Maker 2.0 消费者组复制
- c++ - txt 文件中的 0x6efcc4 输出
- typescript - 如何让 TypeScript 查找类型在这种情况下工作?
- firebase - 使用 firebase 中的现有用户令牌登录
- selenium - 验证 web 元素中存在的属性标题
- python - 在用户输入数据的python中创建一个数据库?
- javascript - MongoDB/Mongoose 查询返回 []: Importing (but not using) Bluebird 修复它
- python - youtube 使用 python 从 url 获取详细信息