У меня есть форма, в которой указывается имя нового пользователя и почтовый индекс. Когда пользователь нажимает «Сохранить», я использую Core Location, чтобы взять почтовый индекс и найти соответствующий город и штат. На этом этапе я хочу, чтобы обработчик завершения сохранил данные формы вместе с городом и штатом. Но по какой-то причине часть завершения не срабатывает. Я все еще пытаюсь выяснить обработчики завершения, но мне показалось, что я довольно близко подошел ... (очевидно, мне нужно иметь дело с обработкой ошибок, и код мог бы быть более кратким .)
Button(action: {
self.getCityStateFromPostalCode(zip: self.zip, completion: {
//This isn't getting called
let newCustomer = Customer(context: self.moc)
newCustomer.custName = self.name
newCustomer.custZip = self.zip
newCustomer.custState = self.state
newCustomer.custCity = self.city
self.appDelegate.saveContext()
})
}) {
Text("Save")
}
func getCityStateFromPostalCode(zip: String, completion: @escaping () -> ()) {
let geocoder = CLGeocoder()
var city = ""
var state = ""
geocoder.geocodeAddressString(zip) { (placemarks, error) in
if let placemark = placemarks?[0] {
if placemark.postalCode == zip {
city = placemark.locality!
state = placemark.administrativeArea!
self.city = city
self.state = state
}
}
}
}