无法将数据从地理编码器保存到全局变量 [重复]

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
    

【讨论】:

以上是关于无法将数据从地理编码器保存到全局变量 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

将当前地理位置保存到变量

使用 AJAX 将地理位置数据发布到 PHP

将地理位置保存在 php 变量中

保存在变量/本地存储中的地理位置数据

与 GoogleMaps 同步地理编码 [重复]

从哪里获取地理数据?