Не удается сохранить долготу и широту из CLGeocoder () - PullRequest
0 голосов
/ 06 апреля 2020

Я хочу получить долготу и широту, используя адрес в качестве строки. Я нашел этот очень полезный пост здесь: Преобразовать адрес в координаты 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, и я пробовал все. Любые идеи, пожалуйста?

Если он попытается напечатать значение во внутреннем блоке кода, он будет напечатан, но я никогда не смогу его вернуть.

Заранее благодарю за ответы.

1 Ответ

0 голосов
/ 06 апреля 2020

CLLocationCoordinate2D - это структура широты и долготы, которые определены как CLLocationDegrees, что само по себе является typealias 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
    }

}
...