【问题标题】:Purpose of forced unwrapping强制解包的目的
【发布时间】:2014-08-15 10:16:28
【问题描述】:

在 swift 文档中,您可以找到:

if convertedNumber != nil {
    println("convertedNumber has an integer value of \(convertedNumber!).")
}
// prints "convertedNumber has an integer value of 123." 

有了这个解释

一旦您确定可选项确实包含一个值,您就可以通过在可选项名称的末尾添加一个感叹号 (!) 来访问其基础值。感叹号有效地表示,“我知道这个可选的肯定是有价值的;请使用它。”这被称为强制解包可选值:

好的,明白了,但是它有什么用处呢?如果我没有像这样强制解包,那就不一样了:

if convertedNumber != nil {
    println("convertedNumber has an integer value of \(convertedNumber).")
}
// prints "convertedNumber has an integer value of 123."

谢谢你启发我:)

【问题讨论】:

    标签: swift forced-unwrapping


    【解决方案1】:

    如果我不强制拆包,情况就不一样了

    没有。 Optional 是一种不同的类型。如果您实际上在没有展开的情况下运行上面的代码(这在操场上是微不足道的),您可以立即看到差异。

    可选的打印为Optional(123),未包装的打印为123。您不能将可选项传递给需要特定类型的东西,而无需先打开它。

    了解 Optional 是完全不同的类型,而不是特定类型的专用类型(例如,没有“可选 Int”,有一个包含 Int 的 Optional)是理解这一点的关键。如果您对更长的解释感兴趣,我已经写了here

    【讨论】:

    • 你写的好文章,非常清晰易懂,辛苦了,谢谢! Swift 让我产生了幻觉,它的每一个小功能都很棒:o
    【解决方案2】:

    或者,您可以有条件地打开一个可选的

    if let convertedNumber = <some optional> {
        // If the optional contains a value, then convertedNumber is now the unwrapped value.
        println("convertedNumber has an integer value of \(convertedNumber).")
    }
    

    【讨论】:

    • 您不需要该代码中的!,因为您已经完成了可选绑定
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 2017-01-20
    • 1970-01-01
    相关资源
    最近更新 更多