190327 iOS Swift 變數的 問號 與 驚嘆號

當變數宣告為可能空(這是我稱呼 Optional 的中文)如下

var name: String?

如果要存取可能空的變數,可使用驚嘆號(!)來強制展開(Forced Unwrapping)其值,如下
print( name! )
 但要注意的是,當強制展開時,如果該可能空的變數真的為空(nil)時,就會出現執行時期錯誤(Runtime Error)。

—————————————————————————————————

如要安全的讀取可能空的值,可使用可能空綁定(Optional Binding)如下
if let hasName = name
{
    print( hasName )
} // end If
 用中文說明上面這段程式碼,「如果 name 有值,則指派給 hasName,並執行大括弧內的程式碼」。

—————————————————————————————————

另一個能安全存取可能空的值或呼叫可能空的方法之技術稱為可能空連鎖(Optional Chaining)如下。
name?.removeFirst( 1 )
上面這行程式碼,當 name 為空時,該行程式碼就不會被執行。

—————————————————————————————————

當變數在宣告時使用了驚嘆號,這樣的方式稱其為隱性展開可能空(Implicitly Unwrapped Optional);以這種方式宣告,是可以直接存取該變數的值。但還是可以使用可能空綁定可能空連鎖。在 Outlet 的宣告最常使用此種方式。

var name: String!

這種宣告方式還是有其危險性。當存取到空(nil)的隱性展開可能空,執行時期錯誤(Runtime Error)還是會發生。

 
PS. 最早我把 Optional 稱為 可為空,後來又認為 可能空 這個稱呼更有警告的意味;帶有在使用上要小心處理的意思。

留言

這個網誌中的熱門文章

泰文子音與字形之間的變化

AUTOMAXX UP-5HX 使用心得