原創文章,歡迎轉載。轉載請註明:關東昇的博客 php
可選類型:java
咱們先看看以下代碼:微信
var n1: Int = 10 n1 = nil //編譯錯誤 let str: String = nil //編譯錯誤
Int和String類型不能接受nil的,但程序運行過程當中有時被複制給nil是在所不免的,Swift爲每一種數據類型提供一種可選類型(optional),即在某個數據類型後面加上問號(?)或感嘆號(!),修改前文示例代碼:app
var n1: Int? = 10 n1 = nil let str: String! = nil
Int?和String!都是原有類型Int和String可選類型,它們能夠接受nil。網站
可選類型值拆包spa
在可選類型的問號(?)或感嘆號(!)究竟有什麼區別呢?這與可選類型的「拆包」(unwrapping)有關,拆包是將可選類型變成普通類型,若是咱們直接打印非空的可選類型值,代碼以下:.net
var n1: Int? = 10 print(n1)
輸出的結果是Optional(10),而非10。因此試圖計算表達式n1 + 100會發生編譯錯誤,代碼以下:設計
var n1: Int? = 10 print(n1 + 100) //發生編譯錯誤
須要對可選類型值進行「拆包」是必要地。code
「拆包」分爲顯示拆包和隱性拆包。教程
使用問號(?)聲明的可選類型,在拆包時須要使用感嘆號(!),這種拆包方式稱爲「顯式拆包」;
使用感嘆號(!)聲明的可選類型,在拆包時能夠不使用感嘆號(!),這種表示方式稱爲「隱式拆包」。
看看下面代碼:
var n1: Int? = 10 print(n1! + 100) //顯式拆包 var n2: Int! = 100 print(n2 + 200) //隱式拆包
歡迎關注關東昇新浪微博@tony_ 關東昇。
關注智捷課堂微信公共平臺,瞭解最新技術文章、圖書、教程信息
更多精品iOS、Cocos、移動設計課程請關注智捷課堂官方網站:http://www.zhijieketang.com
智捷課堂論壇網站:http://51work6.com/forum.php