Вернуть CLLocationCoordinate2D в структуру - PullRequest
0 голосов
/ 30 мая 2018

Я новичок в программировании, и мой вопрос в том, как вернуть данные переменных типа CLLocationCoordinate2D в Coordinates, то есть в тип структуры.Пытаясь разработать приложение для погоды.

У меня есть структура:

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)

Проблема в том, что эти координаты в функции находятся в замыкании.Поэтому я не могу вернуть их и т. Д. Я пытаюсь найти правильный ответ, но безрезультатно.У кого-нибудь есть совет / решение?

1 Ответ

0 голосов
/ 30 мая 2018

в этой строке:

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

заменить let на var

и в этом коде:

  @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)
            } 

так ваша переменная координат будет обновлена ​​с новым значением long long

...