我使用CLGeocoder进行反向地理定位,并获取CLPlacemark数组。当我在美国境外使用全球定位系统(即-27,127)并访问placemark.postalCode时,应用程序崩溃时:
“致命错误:在展开可选值时意外发现为零”。
看来,placemark.postalCode是没有邮政编码可用的nil。但是Swift中的postalCode返回类型是String!
var postalCode: String! { get } // zip code, eg. 95014
所以我甚至不能测试nil,因为崩溃是由postalCode的getter引起的。
有什么办法防止这场坠机吗?谢谢!
发布于 2014-12-27 21:05:29
作为一个可选的,即使隐式地打开包装,也可以检查它是否为nil:
if placemark.postalCode != nil {
}该应用程序不会崩溃,因为:)
要证明这一点,只需在操场上尝试这段代码,其中两个隐式展开属性(计算属性和存储属性)被检查是否为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")
}https://stackoverflow.com/questions/27671435
复制相似问题