Я пытаюсь сгенерировать форматированный полный адрес с помощью CLGeocoder в Swift 8. Я ссылался на этот поток SO, чтобы получить код, приведенный ниже.Swift - Создание формата адреса из обратного геокодирования
Однако иногда приложение падает с ошибкой «ноль» в строке:
//Address dictionary
print(placeMark.addressDictionary ?? "")
Вопросы:
- Как я могу объединить эти значения, полученные из Геокодера с образованием полный адрес? (Улица + Город + и т. Д.)
- Как обрабатывать ошибку nil, которую я получаю, когда func не может найти адрес?
Полный код:
func getAddress() -> String {
var address: String = ""
let geoCoder = CLGeocoder()
let location = CLLocation(latitude: selectedLat, longitude: selectedLon)
//selectedLat and selectedLon are double values set by the app in a previous process
geoCoder.reverseGeocodeLocation(location, completionHandler: { (placemarks, error) -> Void in
// Place details
var placeMark: CLPlacemark!
placeMark = placemarks?[0]
// Address dictionary
//print(placeMark.addressDictionary ?? "")
// Location name
if let locationName = placeMark.addressDictionary!["Name"] as? NSString {
//print(locationName)
}
// Street address
if let street = placeMark.addressDictionary!["Thoroughfare"] as? NSString {
//print(street)
}
// City
if let city = placeMark.addressDictionary!["City"] as? NSString {
//print(city)
}
// Zip code
if let zip = placeMark.addressDictionary!["ZIP"] as? NSString {
//print(zip)
}
// Country
if let country = placeMark.addressDictionary!["Country"] as? NSString {
//print(country)
}
})
return address;
}
и последний адрес печати строки. у вас есть весь адрес –
Есть проблема с этим. Функция func проходит этот процесс перед ожиданием обработки адреса из LatLng.Поэтому я получаю пустую строку – Dinuka
@RickGrimesLikesWalkerSoup проверяет весь мой метод, который я использую в своем проекте. вы также можете использовать его –