我有一个获取新用户名和邮政编码的表单。当用户按下Save时,我使用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
}
}
}
}
发布于 2020-08-04 21:19:47
在您的函数中,您没有调用completion
参数:
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
}
}
completion() // <- add this (may be moved depending on the `error` parameter
}
}
https://stackoverflow.com/questions/63254909
复制