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?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 socket.gethostbyname(socket.gethostname) 只绑定到本地 IP 地址?