首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CLPlacemark在Swift中的碰撞

CLPlacemark在Swift中的碰撞
EN

Stack Overflow用户
提问于 2014-12-27 21:03:07
回答 1查看 1.1K关注 0票数 3

我使用CLGeocoder进行反向地理定位,并获取CLPlacemark数组。当我在美国境外使用全球定位系统(即-27,127)并访问placemark.postalCode时,应用程序崩溃时:

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

看来,placemark.postalCode是没有邮政编码可用的nil。但是Swift中的postalCode返回类型是String!

var postalCode: String! { get } // zip code, eg. 95014

所以我甚至不能测试nil,因为崩溃是由postalCode的getter引起的。

有什么办法防止这场坠机吗?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-27 21:05:29

作为一个可选的,即使隐式地打开包装,也可以检查它是否为nil:

代码语言:javascript
复制
if placemark.postalCode != nil {

}

该应用程序不会崩溃,因为:)

要证明这一点,只需在操场上尝试这段代码,其中两个隐式展开属性(计算属性和存储属性)被检查是否为nil:

代码语言:javascript
复制
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")
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27671435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档