【问题标题】:Cannot save the longitute and latitude from CLGeocoder()无法从 CLGeocoder() 保存经度和纬度
【发布时间】:2020-07-18 18:58:23
【问题描述】:

我想使用地址作为字符串来检索经度和纬度。我在这里发现了这篇非常有用的帖子:Convert address to coordinates swift

但是当我想将结果保存在双字段中并返回时,我不能。我所做的是

func getLatitude(address:String) -> Double{

var lati = 0.0

var geocoder = CLGeocoder()
geocoder.geocodeAddressString("your address") {
    placemarks, error in
    let placemark = placemarks?.first
    if let lat = placemark?.location?.coordinate.latitude{
    lati = lat
    }

   }
  }
 return lati
}

在 geocoder.geocodeAddressString 块内填充了该值,但是当我尝试返回时,它总是给我 0.0 并且我已经尝试了所有方法。请问有什么想法吗?

如果它尝试打印内部代码块中的值,它会被打印,但我永远无法返回它。

提前感谢您的回答。

【问题讨论】:

    标签: ios swift location clgeocoder


    【解决方案1】:

    CLLocationCoordinate2D 是定义为 CLLocationDegrees 的纬度和经度结构,它本身是 Double 的类型别名。

    var latitude: Double?
    var longitude: Double?
    
    func getLocation(address: String) {
    
        let geocoder = CLGeocoder()
        geocoder.geocodeAddressString(address) { placemarks, error in
            guard let placemark = placemarks?.first else { return }
            let coordinate = placemark.location?.coordinate
            latitude = coordinate?.latitude
            longitude = coordinate?.longitude
        }
    
    }
    

    【讨论】:

    • 非常感谢您的回答。我会尝试并回复你
    • 我仍然无法提取它们。我可以像以前一样在这段代码中打印坐标,但我不能将它们提取成双精度。
    • 我在第一次按下按钮时调用该函数,它说纬度为零,并给了我这个 2020-04-08 14:09:44.759923+0200 Project[19601:205223] libMobileGestalt MobileGestalt.c:1647:无法检索区域信息我第二次按下它并在它给我正确的值之后再次感谢您的努力
    • 当你从网上下载一些图片时,需要一些时间,对吧?您无法按下按钮并立即获取图像。您的应用程序首先发送请求,然后在一段时间后从服务器响应。同样的情况也在这里。地理编码器发送请求,并在一段时间后响应位置。所以你必须在闭包内处理你的数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 2014-01-15
    相关资源
    最近更新 更多