Swift基礎(chǔ)_06可選類型

可選類型(Optional)

Optional

  • Optional是Swift中的可選類型

  • Optional 包括兩種取值 nil 和 真實(shí)值

  • 什么是Optional ?

    • Optional是Swift中引入的可選類型.在Swift中聲明一個(gè)標(biāo)識(shí)符的時(shí)候,默認(rèn)情況下它是non-optional的,如此,該標(biāo)識(shí)符只能被賦值非空的值,當(dāng)給non-optional賦值nil的時(shí)候編譯器會(huì)報(bào)錯(cuò)。
      • 對(duì)于OC的同學(xué)來(lái)說(shuō)有點(diǎn)奇怪,之前聲明變量NSString的變量初始值可以為nil的。
      • 因?yàn)閚il在Swift中是一種特殊類型,所以不能賦值給指定數(shù)據(jù)類型的標(biāo)識(shí)符

為什么引入可選類型

  • Swift是一個(gè)安全的編程語(yǔ)言,可選類型就是安全語(yǔ)言的一大體現(xiàn)。OC中運(yùn)行時(shí)才會(huì)發(fā)現(xiàn)的錯(cuò)誤,Swift中的可選類型在編譯階段就能找出一些OC中運(yùn)行時(shí)出現(xiàn)的錯(cuò)誤。

  • Swift加強(qiáng)了對(duì)空值的檢查


代碼演練

定義可選類型

// 錯(cuò)誤寫(xiě)法
// let string : String = nil
// 正確寫(xiě)法:
// 寫(xiě)法一:定義可選類型
let string : Optional<String> = nil

// 寫(xiě)法二:定義可選類型,語(yǔ)法糖(常用)
let string : String? = nil

給可選類型賦值

string = "CWB"

// 打印結(jié)果
print(string)
// 結(jié)果:Optional("CWB")\n
// 因?yàn)榇蛴〕鰜?lái)的是可選類型,所有會(huì)帶Optional

拆包 !

  • 在可選類型的標(biāo)識(shí)符后面加! 就是對(duì)可選類型進(jìn)行強(qiáng)制拆包

    • 拆包就是把可選類型的真實(shí)值取出來(lái)

    • 強(qiáng)制拆包在一定程度上是有風(fēng)險(xiǎn)的,如果可選類型取值nil會(huì)造成崩潰

// 取出可選類型的真實(shí)值(解包)
print(string!)
// 結(jié)果:CWB\n   沒(méi)有了Optional

// 注意:如果可選類型為nil,強(qiáng)制取出其中的值(解包),會(huì)出錯(cuò)
string = nil
print(string!) // 報(bào)錯(cuò)
// 正確寫(xiě)法:  但是這種寫(xiě)法在正常開(kāi)發(fā)中會(huì)造成if語(yǔ)句的嵌套
if string != nil {
    print(string!)
}

可選綁定

  • 可選綁定作用

    • 讓代碼更簡(jiǎn)潔
    • 可選綁定會(huì)先判斷標(biāo)識(shí)符是否為nil,如果不為nil則對(duì)標(biāo)識(shí)符進(jìn)行拆包
// 簡(jiǎn)單寫(xiě)法:為了讓在if語(yǔ)句中可以方便使用string
if var str = string {
    print(str)
}
// 可選綁定示例 創(chuàng)建request

// 通過(guò)該方法創(chuàng)建的URL,可能有值,也可能沒(méi)有值
// 錯(cuò)誤寫(xiě)法:如果返回值是nil時(shí),就不能接收了
let url : NSURL = NSURL(string: "www.520it.com")

// 正確寫(xiě)法:使用可選類型來(lái)接收
let url : NSURL? = NSURL(string: "www.520it.com")

// 通過(guò)url來(lái)創(chuàng)建request對(duì)象
if let url = url { 
let request = NSURLRequest(URL: url)
}

總結(jié)

可選類型在Swift基礎(chǔ)中算是一個(gè)比較難理解的概念,但慢慢熟悉了就會(huì)發(fā)現(xiàn)其中的奧妙,可選綁定初學(xué)的同學(xué)可能感覺(jué)比較麻煩,沒(méi)關(guān)系 ,多用用就會(huì)發(fā)現(xiàn)你愛(ài)上它了。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容