ios - 将 CLLocationCoordinate2D 返回到结构

标签 ios swift coordinates clgeocoder cllocationcoordinate2d

我是编程新手,我的问题是如何将变量类型 CLLocationCoordinate2D 的数据返回到坐标,即结构类型。尝试开发天气应用。

我有一个结构:

struct Coordinates {
    let latitude: Double
    let longitude: Double
}

我的代码如下所示:

//getting coordinates from String
func getCoordinateFrom(address: String, completion: @escaping(_ coordinate: CLLocationCoordinate2D?, _ error: Error?) -> () ) {
                CLGeocoder().geocodeAddressString(address) { placemarks, error in
                    completion(placemarks?.first?.location?.coordinate, error)
                }
            }

//When the User type his city, coordinates have type of CLLocationCoordinate2D    
@IBAction func changeCityButtonPressed(_ sender: UIButton) {
            guard let address = textField.text else { return }
            getCoordinateFrom(address: address) { coordinate, error in
                guard let coordinate = coordinate, error == nil else { return }
                DispatchQueue.main.async {
                    print(coordinate)
                }  
            }
        }

我有一个常量,我的任务是将坐标从函数转移到这个常量。

  let coordinates = Coordinates(latitude: 00.617366, longitude: 37.617366)

问题是函数中的这些坐标是闭包的。所以我不能返回等等。我试图找到正确的答案,但没有结果。有人有一些建议/解决方案吗?

最佳答案

在这一行:

 let coordinates = Coordinates(latitude: 00.617366, longitude: 37.617366)

var替换let

在这段代码中:

  @IBAction func changeCityButtonPressed(_ sender: UIButton) {
        guard let address = textField.text else { return }
        getCoordinateFrom(address: address) { coordinate, error in
            guard let coordinate = coordinate, error == nil else { return }
            DispatchQueue.main.async {
                print(coordinate)
            }  
        }
    }

替换为:

  guard let coordinate = coordinate, error == nil else { return }
            DispatchQueue.main.async {
                print(coordinate)
            } 

通过这个:

  guard let coordinate = coordinate, error == nil else { return }
            coordinates.latitude = coordinate.latitude
            coordinates.longitude = coordinate.longitude
            DispatchQueue.main.async {
                print(coordinate)
            } 

这就是您的坐标变量将如何更新为新的经纬度

关于ios - 将 CLLocationCoordinate2D 返回到结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50603123/

相关文章:

ios - UIButton 不改变图像

ios - 将 View 从其原点旋转到另一个 View

arrays - 如何将文件夹中的图像添加到我的 swift 代码中?

ios - 文本字段占位符字体会产生问题

java - 使用坐标在网格中查找图 block

c - 如何在 C 中返回坐标结构

ios - 交付带有内容的核心数据应用程序的最佳实践?

ios - swift PFQueryTableViewController - 在呈现单元格之前删除重复的对象

Javascript,查找第一个有效数字(值范围从 87.352 到 0.0002432)

ios - super View 的顶部空间不起作用