Swift 中的 CLPlacemark 崩溃

Posted

技术标签:

【中文标题】Swift 中的 CLPlacemark 崩溃【英文标题】:CLPlacemark crash in Swift 【发布时间】:2014-12-27 21:03:07 【问题描述】:

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

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

似乎placemark.postalCodenil,其中没有可用的邮政编码。但是 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 几乎总是为零。我应该使用别的东西吗?

无法解开 Promise<[CLPlacemark]>

Swift 中的 Xcode 调试/崩溃报告是不是损坏?

Swift 中的本地通知在 iOS 7 上崩溃

Facebook Login 中的取消按钮使用 Swift 崩溃了吗?