隐式解包可选是nil但不会导致运行时异常

时间:2014-09-01 19:57:00

标签: swift

我的印象是隐式展开的可选项会在使用时导致运行时异常,并且它是nil。但是下面的代码没有运行时异常,为什么?

var str:String?
println(str!)  // Crashes as expected

var str:String! // Implicitly unwrapped
println(str)    // Does not crash, not what I expect - it prints nil

2 个答案:

答案 0 :(得分:1)

它将变量打印为枚举(即可选),因为内部可选的是enum Optional<T>。 更准确地说,我认为它使用了debugDescription属性,实际上就是这样:

var str:String?
println(str) // Prints "nil"
str.debugDescription // Prints "nil"

答案 1 :(得分:0)

隐式展开的可选项仅在需要非可选的情况下强制解包。 println()接受所有类型,包括选项,因此在传递给println()之前不需要强行打开它。由于它没有打开,所以它不会崩溃。