Обратное объяснение геокодирования - PullRequest
0 голосов
/ 14 декабря 2018

Я нашел этот замечательный кусок кода для обратного геокодирования в Swift 4 здесь: Обратное геокодирование в Swift 4

Я не могу понять, что здесь происходит:

func geocode(latitude: Double, longitude: Double, completion: @escaping (CLPlacemark?, Error?) -> ())  {
CLGeocoder().reverseGeocodeLocation(CLLocation(latitude: latitude, longitude: longitude)) { completion($0?.first, $1) }
}

После того как вы позвоните отсюда:

geocode(latitude: -22.963451, longitude: -43.198242) { placemark, error in
 guard let placemark = placemark, error == nil else { return }
// you should always update your UI in the main thread
DispatchQueue.main.async {
    //  update UI here
    print("address1:", placemark.thoroughfare ?? "")
    print("address2:", placemark.subThoroughfare ?? "")
    print("city:",     placemark.locality ?? "")
    print("state:",    placemark.administrativeArea ?? "")
    print("zip code:", placemark.postalCode ?? "")
    print("country:",  placemark.country ?? "")       
 }
}

Может кто-нибудь предложить объяснение.

1 Ответ

0 голосов
/ 14 декабря 2018
# Gets latitude, longitude and a completion block
func geocode(latitude: Double, longitude: Double, completion: @escaping (CLPlacemark?, Error?) -> ()) 
{
    # Calls system function to resolve the coordinates
    CLGeocoder().reverseGeocodeLocation(CLLocation(latitude: latitude, longitude: longitude))
    {
        # $0 is the placemarks array so this returns the first value of the placemarks array
        # $1 is the error 
        completion($0?.first, $1)

    }
}

Функция геокодирования получает широту и долготу и блок завершения.Он передает координаты в функцию CLGeocoder (). ReverseGeocodeLocation и возвращает первую метку с блоком завершения.

Подпись метода для reverseGeocodeLocation равна

func reverseGeocodeLocation(_ location: CLLocation, completionHandler: @escaping CLGeocodeCompletionHandler)

А обработчик завершения определен как

typealias CLGeocodeCompletionHandler = ([CLPlacemark]?, Error?) -> Void

, как вы можете видеть [CLPlacemark]?необязательный массив CLPlacemarks

...