關於swift的可選值(optional),swiftoptional

來源:互聯網
上載者:User

關於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/ 轉載請註明出處

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.