在swift中引入了一個(gè)新的類(lèi)型,可選值類(lèi)型Optionals
,初看Optionals的感覺(jué)很陌生,在我第一眼看到它的時(shí)候,我就在想...這是什么鬼...但是仔細(xì)想想的話(huà),可選值Optionals
類(lèi)型的引入,為我們也帶了便利.
接下來(lái),讓我來(lái)看看可選值Optionals
是什么吧.
概念: 或者有一個(gè)值,或者沒(méi)有值(nil)
可選值并不是一個(gè)確定的類(lèi)型,可以理解為是對(duì)人類(lèi)基本類(lèi)型進(jìn)行包裝 之后的類(lèi)型,在Object-c中不能為一個(gè)變量指定一個(gè)nil值,指定一個(gè)nil值, 會(huì)在運(yùn)行時(shí)程序崩潰.
int num = nil; // 看編譯器的時(shí)候,只會(huì)有警告,運(yùn)行時(shí)有異常
有時(shí)候,我們聲明一個(gè)變量,不一定要給它賦值,有人會(huì)說(shuō),在Object-c中直接聲明一個(gè)變量就好了
int num; // 運(yùn)行時(shí)會(huì)隨機(jī)分配一個(gè)值給變量,如果是先寫(xiě)后讀的話(huà),沒(méi)有任何事情,但是如果是先讀后寫(xiě)的話(huà) 具體會(huì)發(fā)生什么,那也只有上帝知道了...不過(guò)現(xiàn)在編譯器會(huì)默認(rèn)賦值為0, 最終結(jié)果是num不為nil
但是要知道的時(shí)候,雖然我們沒(méi)有手動(dòng)給變量賦值,但是程序在運(yùn)行時(shí)會(huì)隨機(jī)分配一個(gè)值給變量
如果我說(shuō),我要一個(gè)變量沒(méi)有值為nil
,在后面能給它賦值的話(huà),顯然Object-c是不能滿(mǎn)足我們的需求的
如果有java語(yǔ)言功底的話(huà),基本類(lèi)型也是不賦值為null的,但是在基本類(lèi)型之上進(jìn)行了一個(gè)層包裝int : Integer //包裝類(lèi)型 Integer 的話(huà),是可以賦值為null
swift能滿(mǎn)足我們的要求,所以swift增加了新的類(lèi)型,
可選值 Optionals
類(lèi)型
var name:String? = “l(fā)d”
這樣聲明或許有人說(shuō),你這不是有值啊
var name:String?
使用該行代碼的話(huà),在playground 顯示結(jié)果為nil , 會(huì)有人說(shuō)不明顯
var name:String? = nil
這下明顯了,Object-c 不能直接給值賦值成nil,Swift 也是一樣, 但是使用可選值類(lèi)型就可以完成賦值成nil這項(xiàng)’壯舉'了
可選值Optionals
類(lèi)型 !
與?
var num1:Int? = 10 var num2 = num1! // 此處感嘆號(hào)為強(qiáng)制解析,若果num1為nil此處必然拋異常
有問(wèn)號(hào)的,表示:我有沒(méi)有值,不太確定,使用我的時(shí)候要小心了 有著驚嘆號(hào)的表示:兄弟,我有值,盡情的搞我吧... 在使用!來(lái)解析?聲明的變量的時(shí)候需要謹(jǐn)慎..
上面所說(shuō)的,所聲明都是基本類(lèi)型的,如果是對(duì)象類(lèi)型的話(huà),是可以賦值為nil,并且調(diào)用對(duì)象方法是不會(huì)有任何反應(yīng)的.
_ 今天本來(lái)已經(jīng)為Optionals已經(jīng)打好草稿了...本來(lái)想著回來(lái)直接使用草稿中的內(nèi)容直接發(fā)表了...不過(guò)復(fù)制著,然后改著...現(xiàn)在發(fā)現(xiàn)已經(jīng)和原來(lái)的草稿不大一樣了...每寫(xiě)一次都會(huì)學(xué)到不同的東西!... _