Как я могу получить почтовый индекс пользователя
Я использую Swift 3. У меня проблема с этим кодом, чтобы получить почтовый индекс, такой как "США" и сохранить его в VAR.
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
CLGeocoder().reverseGeocodeLocation(manager.location!, completionHandler: {
(placemarks, error) -> Void in
if error != nil {
print("Location Error!")
return
}
if let pm = placemarks?.first {
self.showlocation(pm)
} else {
print("error with data")
}
})
}
func showlocation(_ placemarks: CLPlacemark) {
self.locationm.stopUpdatingLocation()
print("Location done")
// getlocation = placemarks.postalCode! "this string var is nil"
}
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
print("Location Error: " + error.localizedDescription)
}
В коде нет ошибок, но приложение не работает, если я просто удалил "getlocation = placemarks.postalCode!" приложение не вылетает, но я не могу получить почтовый индекс. Это работало на Swift 2. Любая помощь, чтобы исправить это?
2 ответа
Решение
Как отметили @ashley-mills, это два разных типа информации. Когда вы ожидаете, что ноль может быть возможен, или даже если вы не ожидаете его, лучшее решение - защитить себя от наличных с помощью чего-то вроде следующего.
guard let getlocation = placemarks.postalCode else { print("Returned Nil"); return }
print(getlocation) // notice no unwrap need
Проблема решена путем изменения:
getlocation = placemarks.postalCode!
чтобы:
getlocation = placemarks.isoCountryCode!
Я не знаю, в чем разница, может быть, почтовый индекс не работает в Swift 3?