聽(tīng)故事學(xué)Swift系列 - 小明與紅包(optionals - 可選類型)
熊孩子小明&他的月光族姑姑
一
故事
熊孩子小明要過(guò)7歲生日了,一大早就堵在家門口,向來(lái)給他過(guò)生日的親戚們要紅包,而且表示,不給紅包就搗亂.
小明姑姑是個(gè)標(biāo)準(zhǔn)的月光族,在小明過(guò)生日的前一天才想起來(lái),自己好像又月光了...怎么辦?賭一把~ 不管銀行卡里能取出來(lái)多少錢,都裝進(jìn)紅包里塞給小明,嗯,空紅包就空紅包好了,反正姑姑盡力了,小明你要知道,姑姑其實(shí)是愛(ài)你的.
知識(shí)點(diǎn)
-
optional類型的數(shù)據(jù)就像是一個(gè)紅包,不管字符串還是結(jié)構(gòu)體,都可以包進(jìn)紅包里.
- 紅包的狀態(tài)只有兩種,一種是沒(méi)包東西,一種是包了東西
optional類型的數(shù)據(jù)值也只有兩種,一種是nil,一種是非nil
注意:nil在OC中,代表一個(gè)空指針,而在Swift中,只能用來(lái)表示Optional類型數(shù)據(jù)的狀態(tài) -- 紅包是空的 - "不管銀行卡里能取出來(lái)多少錢,都裝進(jìn)紅包里塞給小明"這一句是想說(shuō)明Optional的常見(jiàn)使用情形:當(dāng)不確定一個(gè)對(duì)象有沒(méi)有值的時(shí)候,可以使用Optional類型進(jìn)行包裝 - 如字符串的.toInt()方法(字符串可能根本就不能轉(zhuǎn)換成int類型的數(shù)據(jù))
二
故事
吃完蛋糕送走大家,小明興高采烈地開(kāi)始拆紅包.哇!這個(gè)紅包里包了好多毛爺爺!哇!這個(gè)紅包里居然包了美金!哇!這個(gè)紅包居然是空的!!!小明哭了,哭的好傷心,整個(gè)人都崩潰了.
知識(shí)點(diǎn)
- 拆紅包是指Optional類型數(shù)據(jù)的強(qiáng)制解析,解析方法為:在optional數(shù)據(jù)后面使用"!"
- 強(qiáng)制解析之前,一定要確保Optional類型的數(shù)據(jù)非nil哦!否則程序也會(huì)像小明一樣,崩潰掉的
三
故事
轉(zhuǎn)眼間小明要過(guò)8歲生日了.回想起7歲時(shí)收到的空紅包,小明早早準(zhǔn)備了一個(gè)透明塑料袋,收紅包的時(shí)候,要讓大家當(dāng)面把紅包里面包的東西,先放進(jìn)塑料袋里,然后才能進(jìn)屋吃飯.如果沒(méi)有東西裝進(jìn)塑料袋里,小明就撒潑打滾吐口水(好一個(gè)熊孩子-_-|||)
知識(shí)點(diǎn)
這個(gè)故事講的就是Optional類型數(shù)據(jù)的可選綁定.
通過(guò)可選綁定(optional binding)可以判斷可選類型是否包含值,如果包含就把值賦給一個(gè)臨時(shí)常量或者變量。可選綁定可以用在if和while語(yǔ)句中來(lái)對(duì)可選類型的值進(jìn)行判斷并把值賦給一個(gè)常量或者變量。
- if let 塑料袋里的錢 = 紅包里的錢() {
- 小明.高高興興親一個(gè)方法
- } else {
- 小明.撒潑打滾吐口水方法
- }
四
故事
小明長(zhǎng)大了,知道讓親戚們當(dāng)著面把紅包打開(kāi)的行為不太好,也不在意有一些無(wú)良親戚給空紅包的行為了.他學(xué)會(huì)了裝糊涂(怎么突然變化這么大-_-|||).雖然在拆到空紅包的時(shí)候還是會(huì)崩潰.
小明知道了誰(shuí)值得信賴,紅包里一定有票票,即使當(dāng)面拆開(kāi)也不會(huì)讓自己崩潰;誰(shuí)不值得信賴 -- 不值得信賴的人的紅包,就不拆了吧.
這就是成長(zhǎng)啊.
知識(shí)點(diǎn)
隱式解析可選類型
有時(shí)候在程序架構(gòu)中,第一次被賦值之后,可以確定一個(gè)可選類型總會(huì)有值。在這種情況下,每次都要判斷和解析可選值是非常低效的,因?yàn)榭梢源_定它總會(huì)有值。
這種類型的可選狀態(tài)被定義為隱式解析可選類型(implicitly unwrapped optionals)。把想要用作可選的類型的后面的問(wèn)號(hào)(String?)改成感嘆號(hào)(String!)來(lái)聲明一個(gè)隱式解析可選類型。
當(dāng)可選類型被第一次賦值之后就可以確定之后一直有值的時(shí)候,隱式解析可選類型非常有用。隱式解析可選類型主要被用在 Swift 中類的構(gòu)造過(guò)程中
一個(gè)隱式解析可選類型其實(shí)就是一個(gè)普通的可選類型,但是可以被當(dāng)做非可選類型來(lái)使用,并不需要每次都使用解析來(lái)獲取可選值。
尾聲
嗯,小明的故事結(jié)束了!以后一定不要給自己的小輩包空紅包哦!否則他長(zhǎng)大了,就不會(huì)隱式解析你了哦!哈哈