为什么在 Swift 的 UILabel 中尝试显示城市和州名称时得到 "exc bad access"?

Why do I get "exc bad access" when trying to display city and state name in a UILabel in Swift?

我不确定我做错了什么。我在下面有这段代码,我试图在 UILabel 中显示城市和州名称。 Xcode 在到达行 if let city = selectedPin!.locality 时一直崩溃。为什么会这样?

var selectedPin:MKPlacemark? = nil

@objc func saveNameToLabel(){

    let placemark = MKPlacemark()
    selectedPin = placemark

    if let city = selectedPin!.locality, //Here is where I get the Error Access
        let state = selectedPin!.administrativeArea {

        labelForCityAndState.text = "\(city) \(state)"
        print("display city and state in label")
    }
}

您收到此错误是因为 MKPlacemark 显然希望您向具有 coordinate 参数的 init 方法之一提供 CLLocationCoordinate2D。例如:

let coordinate = CLLocationCoordinate2D(latitude: ..., longitude: ...)
let placemark = MKPlacemark(coordinate: coordinate)

可以想象 MKPlacemark 的作者从未想过有人会创建一个实际上并不代表某些坐标的地标。显然,如果 MKPlacemark 能更优雅地处理这个错误,那就太好了,但是,遗憾的是,事实并非如此。如果您愿意,您可以 report feedback to Apple 随意处理此行为。