Swift 中的 CLPlacemark 崩溃
Posted
技术标签:
【中文标题】Swift 中的 CLPlacemark 崩溃【英文标题】:CLPlacemark crash in Swift 【发布时间】:2014-12-27 21:03:07 【问题描述】:我正在使用CLGeocoder
进行反向地理定位并获取CLPlacemark
的数组。当我在美国以外使用 GPS(即 -27,127)然后访问 placemark.postalCode
时,应用程序崩溃:
“致命错误:在展开可选值时意外发现 nil”。
似乎placemark.postalCode
是nil
,其中没有可用的邮政编码。但是 Swift 中的 postalCode
返回类型是 String!
:
var postalCode: String! get // zip code, eg. 95014
所以我什至无法测试nil
,因为崩溃是由postalCode
的getter 引起的。
任何想法如何防止这种崩溃?谢谢!
【问题讨论】:
【参考方案1】:作为一个可选的,即使隐式展开,您也可以检查它是否为零:
if placemark.postalCode != nil
并且应用程序不会因此而崩溃:)
为了证明这一点,只需在 Playground 中尝试此代码,其中会检查 2 个隐式展开的属性(一个计算的和一个存储的)是否为零:
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 崩溃的主要内容,如果未能解决你的问题,请参考以下文章
无法在 swift 中使用 CLPlacemark 获取 subLocality
Swift ReverseGeocode CLPlacemark areaOfInterest 几乎总是为零。我应该使用别的东西吗?