Вы можете создать такую функцию:
func getLatAndLong(address : String, competion : @escaping (CLLocationCoordinate2D?) -> ()) {
let geocoder = CLGeocoder()
geocoder.geocodeAddressString(address) { placemarks, error in
let placemark = placemarks?.first
let lat = placemark?.location?.coordinate.latitude
let lon = placemark?.location?.coordinate.longitude
print("Lat: \(lat), Lon: \(lon)")
competion(placemark?.location?.coordinate)
}
}
и затем вызвать ее как:
var location : CLLocationCoordinate2D?
getLatAndLong(address: "pass your address here") { (coordinates) in
self.location = coordinates
}
Теперь ваша переменная location
содержит значение.
вы можете использовать его для получения широты и долготы
let latitide = location?.latitude
let longitude = location?.longitude
Опция 2
Вы можете объявить переменную в классе и обновить его вы цените, как только получите координаты. Я бы предложил использовать вышеуказанный подход, поскольку геокодер работает асинхронно. Лучше использовать обработчик завершения, чтобы узнать, когда геокодер завершил выполнение задачи и получил местоположение.
var latitude = 0.0 //
var longitude = 0.0
let geocoder = CLGeocoder()
geocoder.geocodeAddressString("address") { placemarks, error in
let placemark = placemarks?.first
self.latitude = placemark?.location?.coordinate.latitude ?? 0.0
self.longitude = placemark?.location?.coordinate.longitude ?? 0.0
}