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
    }
}