Swift 可选绑定,为啥需要本地 var?

Posted

技术标签:

【中文标题】Swift 可选绑定,为啥需要本地 var?【英文标题】:Swift Optional binding, why the need for a local var?Swift 可选绑定,为什么需要本地 var? 【发布时间】:2016-05-02 18:34:14 【问题描述】:

我正在阅读 Apple 在 Optional Binding 上的开发者文档

为什么我不能使用:

如果有一些可选的?

声明

代替

if let constantName = someOptional

声明

为什么不需要局部变量或常量?

【问题讨论】:

当你想从可选值中获取值时,你使用可选绑定......不仅仅是检查可选值是否包含值或 nil 您可以随时使用if someOptional != nil ,或者如果您不需要展开的值,您也可以使用if let _ = someOptional 【参考方案1】:

为什么我不能使用:if someOptional? ...

因为可选变量上的? 后缀是为optional chaining 保留的,它允许您访问给定可选变量的属性或调用方法。例如:

// returns an optional version of a given property
let aProperty = anOptional?.someProperty

// calls the method if aProperty contains a value – otherwise doesn't
aProperty?.doSomething()

如果您只想检查一个可选项是否包含一个值,而不关心该底层值,您可以简单地将其与nil 进行比较。例如:

if anOptional != nil 
    // do something

【讨论】:

如果您有兴趣,我与人共同撰写了an answer here,其中列出了(几乎)所有安全使用选项的方法——尽管 Apple Swift 文档很难被击败!【参考方案2】:

简单的答案是 someOptional 是 Optional,而 constantName 是 Type。

Optional 不仅仅是变量的状态,它是一种完全不同的类型。如果您将var someOptional: String? 设置为var someOptional: String,您并没有展开 someOptional,您实际上是在更改 someOptional 的类型。

与将var someOptional: String 更改为var someOptional: Int 功能相同

【讨论】:

以上是关于Swift 可选绑定,为啥需要本地 var?的主要内容,如果未能解决你的问题,请参考以下文章

Swift核心数据:设置可选属性值时为啥需要解包?

为啥 socket.gethostbyname(socket.gethostname) 只绑定到本地 IP 地址?

为啥你可以在 Swift 中为可选类型分配非可选值?

为啥 Python 会在 Pygame 中为“事件”变量抛出未绑定的本地错误? [关闭]

任何不一致的铸造?在可选绑定期间进入 Swift 中的协议

同时初始化和绑定swift可选成员?