【问题标题】: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 {

标签: swift optional-binding


【解决方案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 功能相同

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 2014-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多