SwiftUI - 我可以在按钮操作中使用完成处理程序吗?
SwiftUI - Can I use a completion handler in Button action?
我有一个表格可以获取新用户的姓名和邮政编码。当用户按下保存时,我使用 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
}
}
}
}
在你的函数中你没有调用 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
}
}
我有一个表格可以获取新用户的姓名和邮政编码。当用户按下保存时,我使用 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
}
}
}
}
在你的函数中你没有调用 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
}
}