我使用CLGeocoder
进行反向地理定位并获取CLPlacemark
数组。当我在美国境外使用GPS(即-27,127)然后访问placemark.postalCode
时,该应用程序崩溃了:
"致命错误:在打开一个可选值"时意外发现nil。
似乎placemark.postalCode
是nil
,其中没有邮政编码可用。但是,Swift中的postalCode
返回类型为String!
:
var postalCode: String! { get } // zip code, eg. 95014
所以我甚至无法对nil
进行测试,因为崩溃是由postalCode
的吸气剂引起的。
任何想法如何防止这次崩溃?谢谢!
答案 0 :(得分:5)
作为一个可选项,即使隐式展开,也可以将其检查为nil:
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")
}