Как я могу получить почтовый индекс пользователя

Я использую 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?

Другие вопросы по тегам