问题描述
我使用 CLGeocoder
进行反向地理定位并获取 CLPlacemark
数组.当我在美国以外使用 GPS(即 -27,127)然后访问 placemark.postalCode
时,应用程序崩溃:
I'm using CLGeocoder
for reverse geolocation and get array of CLPlacemark
. When I use GPS outside the US (i.e. -27,127) and then access placemark.postalCode
, the app crashes with:
致命错误:在展开可选值时意外发现 nil".
"fatal error: unexpectedly found nil while unwrapping an Optional value".
看起来,placemark.postalCode
是 nil
,其中没有可用的邮政编码.但是 postalCode
在 Swift 中的返回类型是 String!
:
It seems, that placemark.postalCode
is nil
where no postal code is available. But postalCode
return type in Swift is String!
:
var postalCode:字符串!{ get }//邮政编码,例如.95014
所以我什至不能测试nil
,因为崩溃是由postalCode
的getter引起的.
So I can't even test is for nil
, because the crash is caused by the getter of postalCode
.
任何想法如何防止这种崩溃?谢谢!
Any ideas how to prevent this crash? Thank you!
推荐答案
作为一个可选的,即使隐式解包,你也可以检查它是否为零:
Being an optional, even if implicitly unwrapped, you can check it for nil:
if placemark.postalCode != nil {
}
应用程序不会因此崩溃:)
and the app won't crash because of that :)
为了证明这一点,只需在操场上试试这段代码,其中 2 个隐式展开的属性(一个计算的和一个存储的)被检查为零:
To prove it, just try this code in a playground, where 2 implicitly unwrapped properties (a computed and a stored) are checked for 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")
}
这篇关于Swift 中的 CLPlacemark 崩溃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!