Conversion d'un nom de ville en coordonnées dans Swift

J'ai vu quelques questions sur SO, mais toutes sont anciennes dans Swift 2. J'ai obtenu cette fonction du site Web d'Apple pour convertir un nom de ville en latitude et longitude mais je ne suis pas sûr de ce que la fonction returnnera (puisqu'il n'y a rien ) et que devrais-je passer. Quelqu'un pourrait-il expliquer un peu ou me montrer comment l'utiliser s'il vous plaît.

func getCoordinate( addressSsortingng : Ssortingng, completionHandler: @escaping(CLLocationCoordinate2D, NSError?) -> Void ) { let geocoder = CLGeocoder() geocoder.geocodeAddressSsortingng(addressSsortingng) { (placemarks, error) in if error == nil { if let placemark = placemarks?[0] { let location = placemark.location! completionHandler(location.coordinate, nil) return } } completionHandler(kCLLocationCoordinate2DInvalid, error as NSError?) } } 

Vous pouvez le faire comme suit:

 import CoreLocation func getCoordinateFrom(address: Ssortingng, completion: @escaping(_ coordinate: CLLocationCoordinate2D?, _ error: Error?) -> () ) { CLGeocoder().geocodeAddressSsortingng(address) { placemarks, error in completion(placemarks?.first?.location?.coordinate, error) } } 

Usage:

 getCoordinateFrom(address: "Rio de Janeiro, Brazil") { coordinate, error in guard let coordinate = coordinate, error == nil else { return } // don't forget to update the UI from the main thread DispatchQueue.main.async { print(coordinate) // CLLocationCoordinate2D(latitude: -22.910863800000001, longitude: -43.204543600000001) } } 

L'exécution d'une opération asynchronous telle que l'extraction des coordonnées d'une ville ne peut pas renvoyer de valeur en tant que résultat de la fonction. Vous devez faire l'appel, vaquer à vos occupations et attendre qu'il appelle votre gestionnaire de complétion. C'est ce que le paramètre completionHandler est dans le code ci-dessus. Vous passez une fermeture (un bloc de code) à exécuter une fois les résultats prêts. Vous l'utiliseriez comme ceci:

 getCoordinate(addressSsortingng: someSsortingng) { coordinate, error in if error != nil { //display error return } else { //at this point `coordinate ` contains a valid coordinate. //Put your code to do something with it here print("resulting coordinate = (\(coordinate.latitude),\(coordinate.longitude))") } } 

Notez que pour Swift 3, vous devriez lancer votre fonction plutôt que de returnner un résultat ou une erreur.