强制展开的目的

时间:2014-08-15 10:16:28

标签: swift forced-unwrapping

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

感谢启发我:)

2 个答案:

答案 0 :(得分:15)

  

如果我没有强行解包,那就不一样了

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

可选打印为Optional(123),打开的打印为123。您无法将可选项传递给需要特定类型的内容,而无需先将其展开。

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

答案 1 :(得分: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).")
}