3

我正在使用CLGeocoder反向地理定位并获取CLPlacemark. 当我在美国以外使用 GPS(即 -27,127)然后访问placemark.postalCode时,应用程序崩溃并显示:

“致命错误:在展开可选值时意外发现 nil”。

看来,那placemark.postalCodenil没有邮政编码的地方。但是postalCodeSwift 中的返回类型是String!

var postalCode: String! { get } // zip code, eg. 95014

所以我什至无法测试 is for nil,因为崩溃是由postalCode.

任何想法如何防止这种崩溃?谢谢!

4

1 回答 1

6

作为一个可选的,即使隐式展开,您也可以检查它是否为零:

if placemark.postalCode != nil {

}

并且应用程序不会因此而崩溃:)

为了证明这一点,只需在操场上尝试这段代码,其中 2 个隐式展开的属性(一个计算的和一个存储的)被检查为 nil:

struct Test {
    var nilComputed: String! { return nil }
    var nilStored: String! = nil
}

var test = Test()

if test.nilComputed != nil {
    print("It's not nil")
} else {
    print("It's nil")
}

if test.nilStored != nil {
    print("It's not nil")
} else {
    print("It's nil")
}
于 2014-12-27T21:05:29.943 回答