1

!标记用于 Swift 中的可选值以提取它的包装值,但可以在没有 的情况下提取该值!

var optionalString: String? = "optionalString"
println(optionalString)

另一个使用的例子!

var optionalString: String? = "optionalString"
println(optionalString!)

上面的代码都得到了正确的值,所以我想知道 using 和 not using 有什么区别,!如果可选值是 nil 或其他东西,它是否只是为了在运行时检测错误?提前致谢。

4

3 回答 3

4

正如其他人已经说过的,一个非常好的起点是官方文档。文档非常好地涵盖了该主题。

来自官方文档:

尝试使用!访问不存在的可选值会触发运行时错误。在使用之前,请务必确保可选项包含非零值!强制解包它的值。

println()可能不是测试操作员如何工作的最佳方式!。没有它,println()要么打印值,要么打印 nil,有了它,它要么打印值,要么崩溃。

主要区别在于当我们尝试将可选值分配给另一个值或在函数的参数中使用它时。

假设optionalValue是一个可选的整数。

let actualValue = optionalValue

使用这个赋值,actualValue现在只是另一个可选整数。我们根本没有解开价值。我们有一个可选的而不是整数。

同时,

let actualValue = optionalValue!

现在我们正在强制展开。实际值将是整数而不是可选整数。但是,这段代码会导致运行时异常,即 optionalValue 为 nil。

于 2014-06-15T15:01:39.207 回答
1

我以前从未听说过Swift,但阅读文档似乎很清楚

“使用 ! 运算符解包具有 nil 值的可选项会导致运行时错误。”

如果您的应用程序nil在任何正常情况下都是有效且预期的值和/或您想在代码中捕获和处理它,那么我建议您不要使用它。如果您从没想过它会这样,那么nil将其用作调试辅助工具。运行时错误提示我您的程序将被操作系统报告的消息终止。

于 2014-06-15T14:30:59.643 回答
1

您的问题在《The Swift Programming Language: iBooks 》一书中得到了解答

下载并搜索“!”。

你可以很容易地找到答案,而不必在这里问。为了将来参考,请始终记住先查看手册。

来自“Swift 编程语言”:

您可以使用“if”语句来确定可选项是否包含值。如果一个可选项确实有一个值,它的计算结果为“真”;如果它根本没有价值,则评估为“假”。

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

于 2014-06-15T14:41:25.847 回答