可選類(lèi)型
可選類(lèi)型的介紹
-
注意:
- 可選類(lèi)型是swift中比較難理解的一個(gè)知識(shí)點(diǎn)
- 可以多利用Xcode的提示來(lái)使用
-
概念:
- 在OC開(kāi)發(fā)中,如果一個(gè)變量暫時(shí)不使用,我們通常會(huì)先賦值為0(基本數(shù)據(jù)類(lèi)型)或者賦值為空(對(duì)象類(lèi)型)
- 在swift開(kāi)發(fā)中,nil是一個(gè)特殊的類(lèi)型,因?yàn)楹蛯?shí)際真實(shí)的類(lèi)型不匹配是不能賦值的(swift是強(qiáng)類(lèi)型語(yǔ)言)
- 但是由于在開(kāi)發(fā)中賦值為nil是在所難免的,因此推出了可選類(lèi)型
-
可選類(lèi)型的取值:
- 空值
- 有值
定義可選類(lèi)型
- 定義一個(gè)可選類(lèi)型有兩種寫(xiě)法
- 最基本的寫(xiě)法
- 語(yǔ)法糖(常用)
// 錯(cuò)誤寫(xiě)法
let string : string = nil
// 正確寫(xiě)法
// 注意:name的類(lèi)型是一個(gè)可選類(lèi)型
// 寫(xiě)法一:定義可選類(lèi)型
let name : Optianal<String> = nil
// 寫(xiě)法二:定義可選類(lèi)型,語(yǔ)法糖(常用)
let name : String? = nil
可選類(lèi)型的使用
// 演練一:給可選類(lèi)型賦值
// 定義可選類(lèi)型
var string : Optional<String> = nil
// 給可選類(lèi)型賦值
// 錯(cuò)誤寫(xiě)法:因此該可選類(lèi)型中只能存放字符串
string = 123
// 正確寫(xiě)法:
string = "Hello World"
// 打印結(jié)果
print(string)
// 結(jié)果:Optional("Hello World"\n)
// 因?yàn)榇蛴〕鰜?lái)的是可選類(lèi)型,所以會(huì)帶Optional
// 演練二:取出可選類(lèi)型的值
// 取出可選類(lèi)型的真實(shí)值(解包)
print(string!)
// 結(jié)果:Hello World\n
// 注意:如果可選類(lèi)型為nil,強(qiáng)制取出其中的值(解包),會(huì)出錯(cuò)
string = nil
print(string!) // 報(bào)錯(cuò)
// 正確寫(xiě)法:
if string != nil {
print(string!)
}
// 簡(jiǎn)單寫(xiě)法:為了讓在if語(yǔ)句中可以方便使用string
// 可選綁定
if let str = string {
print(str)
}
真實(shí)應(yīng)用場(chǎng)景
- 目的:讓代碼更加嚴(yán)謹(jǐn)
// 通過(guò)該方法創(chuàng)建的URL,可能有值,也可能沒(méi)有值
// 錯(cuò)誤方法:如果返回值是nil時(shí),就不能接受了
// 如果字符串中有中文,則返回值為nil,因此該方法的返回值就是一個(gè)可選類(lèi)型,而使用一個(gè)NSURL類(lèi)型接收是錯(cuò)誤的
let url : NSURL = NSURL(string: "www.baidu.com")
// 正確寫(xiě)法:使用可選類(lèi)型來(lái)接收
let url : NSURL? = NSURL(string: "www.baidu.com")
// 該方式利用類(lèi)型推導(dǎo)
let url = = NSURL(string: "www.baidu.com")
// 通過(guò)url來(lái)創(chuàng)建request對(duì)象:在使用可選類(lèi)型前要先進(jìn)行判斷是否有值
// 該語(yǔ)法成為可選綁定(如果url有值就解包賦值給tempURL,并且執(zhí)行{})
if let tempUrl = url {
let request = NSURLRequest(URL: tempUrl)
}