我的印象是隐式展开的可选项会在使用时导致运行时异常,并且它是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
答案 0 :(得分:1)
它将变量打印为枚举(即可选),因为内部可选的是enum Optional<T>
。
更准确地说,我认为它使用了debugDescription
属性,实际上就是这样:
var str:String?
println(str) // Prints "nil"
str.debugDescription // Prints "nil"
答案 1 :(得分:0)
隐式展开的可选项仅在需要非可选的情况下强制解包。 println()
接受所有类型,包括选项,因此在传递给println()
之前不需要强行打开它。由于它没有打开,所以它不会崩溃。