2014-09-01 40 views
0

我的印象是,隱式解包可選將在使用時導致運行時異常,且爲零。但是下面的代碼沒有運行時異常,爲什麼?隱式解包可選爲零,但不會導致運行時異常

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 

回答

1

它將變量輸出爲enum(即可選),因爲內部可選是enum Optional<T>。 更確切地說,我相信它使用debugDescription財產,其實這是發生了什麼:

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

它打印零,這不是我所期望的 - 我認爲它會崩潰。 – Boon 2014-09-01 20:19:58

+0

查看更新的答案 – Antonio 2014-09-01 20:26:45

0

的隱式展開可選只有強行解開其中預計非可選的情況。 println()接受所有類型,包括可選項,所以在傳遞到println()之前不需要強行打開它。由於它沒有被解開,所以不會崩潰。

相關問題