5

在 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."

谢谢你启发我:)

4

2 回答 2

15

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

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

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

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

于 2014-08-15T10:24:34.893 回答
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).")
}
于 2014-08-15T10:43:13.510 回答