關於swift的可選值(optional),swiftoptional
關於可選值optional
不同於OC,swift引入了一個新的概念——可選值,瞭解這個optional,對於swift的學習至關重要
概念定義:可以有值也可以沒有值(nil)的一個類型。換句話說,它有兩個狀態:有值,沒有值(nil)
按我的理解,可選值是帶有布爾類型加持的普通類型
如何定義一個可選值呢?
上面的代碼簡單定義了一個叫做optionalValue的可選值。
和普通的變數定義沒有太大區別,唯一不同在於,這裡多了一個問號,?是對普通值的封包 要加在類型後面,也就是說,在變數或者常量的所屬類型後面加一個問號就可以將其定義為一個optional
這裡我給它賦值80,如果不賦值,那麼它預設將是nil
可選值的強制解包forced unwrapping
通過在類型後面加一個問號,可以將這個變數或常量變為可選值,那麼反過來要怎麼做呢?
swift提供瞭解包操作,只需在可選值後面加一個歎號,就可以將可選值強制解包
據說,帶有強制性質的事,都不是什麼好事,於是問題來了……
上面的代碼中,我建立了一個optional變數,沒有賦值,那預設就是nil
在第二行當我試圖將這個optional解包時,出現了錯誤。
原來,nil的可選值解包時候會出現錯誤,蘋果的官方文檔也強調,如果你不100%確信這個可選值有值,那麼不要用強制解包
可選值綁定Optional Binding
既然強制解包在可選值為nil的時候會報錯,那怎麼將可選值裡的資料讀取出來呢?
swift提供了一個更加安全的方法——可選值綁定Optional Binding
上面是官方文檔提供的用法,不太明確,下面是代碼示範:
上面的代碼中,我先定義了一個可選值字串,賦值為90,然後用optional binding建立一個叫做tempValue的常量,if語句會根據tempValue是否從optionalValue中擷取了值來決定是否要來列印出這個值,playground的結果顯示這個tempValue被賦予了“90”
而當我不給可選值賦值,讓它預設為nil的時候,列印tempValue也沒有報錯,if判斷tempValue沒有從optionValue中擷取值,就什麼也沒有做,當然也不會報錯。
這就相當於給可選值找了一個中間人,間接判斷並讀取可選值中的內容,在不確定當前可選值時否為nil的情況下,蘋果官方推薦用這個方式判斷可選值是否為nil並嘗試擷取可選值的資料。
更多內容請訪問 http://www.cnblogs.com/updating/ 轉載請註明出處