如何制作一个从地址swift 4返回坐标的函数

Posted

技术标签:

【中文标题】如何制作一个从地址swift 4返回坐标的函数【英文标题】:How to make a function that return coordinates from address swift 4 【发布时间】:2020-04-15 13:23:51 【问题描述】:

您好,我想接收地址的坐标。我做了这个功能但不起作用。总是返回 0.0, 0.0

 func getCoordinates(address: String)->(Double, Double)
    DispatchQueue.main.async 
        let geoCoder = CLGeocoder()

        geoCoder.geocodeAddressString(address)  (placemarks, error) in
            guard let placemarks = placemarks, let location = placemarks.first?.location else   return 
            latitude = location.coordinate.latitude
            longitude = location.coordinate.longitude

        
    
    return (latitude ?? 0.0, longitude ?? 0.0)


【问题讨论】:

请对 Swift 中的同步/异步过程进行更多搜索。 return 行总是在 DispatchQueue.main.async 块之前执行,这就是你总是失败的原因 【参考方案1】:

您需要完成并在地理编码器的回调中插入主队列块

func getCoordinates(_ address: String,completion:@escaping((CLLocationCoordinate2D) -> ()))
    let geoCoder = CLGeocoder()
    geoCoder.geocodeAddressString(address)  (placemarks, error) in
        guard let placemarks = placemarks, let location = placemarks.first?.location else   return 
        DispatchQueue.main.async 
            completion(location.coordinate)
        
    

打电话

getCoordinates("someAdd")   loc in


【讨论】:

非常感谢!

以上是关于如何制作一个从地址swift 4返回坐标的函数的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Swift 从一个函数返回不同类型的结构?

如何制作一个比较字符串的函数?

Swift - 如何从函数更新 UILabel

swift - 如何从系统函数的完成处理程序闭包中返回?

从使用 wkwebview 返回值的 javascript 调用 swift 函数

4 .Swift函数|闭包