一、基本用法
可選性是Swift提供的一個(gè)特殊類(lèi)型,它為我們編寫(xiě)程序提供便利的條件
swift是強(qiáng)類(lèi)型語(yǔ)言,當(dāng)我們需要使用一個(gè)變量,既可以為String,也可以為nil時(shí),這時(shí)候就需要我們使用可選型。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
// 使用特殊值作為“無(wú)”可能產(chǎn)生歧義 //var errorCode = 404 //errorCode = 0 // 使用可選型 var errorCode:Int? = 404 print( errorCode ) errorCode = nil print( errorCode ) var color: UIColor? = nil // Int? 和 Int 不是一種類(lèi)型 let imInt = 405 errorCode = imInt //imInt = errorCode // 必須顯示地聲明可選型的類(lèi)型 //var imOptional = nil var imOptional: String? = nil |
二、可選型解包使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
var errorCode:String? = "404" print( errorCode ) // 可選型不可以直接使用 //"The errorCode is" + errorCode // 強(qiáng)制解包 "The errorCode is " + errorCode! // 強(qiáng)制解包是危險(xiǎn)的 errorCode = nil //"The errorCode is" + errorCode! // 判斷不是nil if errorCode != nil{ "The errorCode is " + errorCode! } else { "No error" } // if let 解包 if let unwrappedErrorCode = errorCode{ "The errorCode is " + unwrappedErrorCode } else { "No error" } // 可以使用相同的變量名 if let errorCode = errorCode{ "The errorCode is " + errorCode } else { "No error" } // 使用if-let同時(shí)解包多個(gè)變量 var errorMessage:String? = "Not found" if let errorCode = errorCode{ if let errorMessage = errorMessage{ "The errorCode is " + errorCode + "\nThe errorMessage is " + errorMessage } } |
三、多層解包(**swift3.0有變化)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
//多層解包(swift 2.0使用) if let errorCode = errorCode , errorMessage = errorMessage{ "The errorCode is " + errorCode + "\nThe errorMessage is " + errorMessage } //以上多層解包方法在swift3.0中應(yīng)寫(xiě)為 if let errorCode = errorCode , let errorMessage = errorMessage{ "The errorCode is " + errorCode + "\nThe errorMessage is " + errorMessage } // where(swift 2.0使用) if let errorCode = errorCode , errorMessage = errorMessage where errorCode == "404" { print( "Page not found" ) } //在swift3.0中應(yīng)寫(xiě)為 // where if let errorCode = errorCode , let errorMessage = errorMessage , errorCode == "404" { print( "Page not found" ) } |
四、Optional chaining的使用
可選型?這種寫(xiě)法叫做Optional chaining
這種方法可以進(jìn)行嘗試解包,使代碼簡(jiǎn)潔
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
var errorMessage: String? = "Not Found" if let errorMessage = errorMessage{ errorMessage.uppercased() } //使用 Optional chaining errorMessage?.uppercased() var uppercaseErrorMessage = errorMessage?.uppercased() //uppercaseErrorMessage為可選型 if let errorMessage = errorMessage?.uppercased(){ errorMessage } // Optional chaining 也可以使用! let uppercaseErrorMessage2 = errorMessage!.uppercased() //此時(shí) uppercaseErrorMessage2 為String類(lèi)型。此時(shí)為強(qiáng)制解包,容易出現(xiàn)錯(cuò)誤 |
五、Nil-Coalescing 的使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
// Nil-Coalescing var errorMessage: String? = nil let message: String if let errorMessage = errorMessage{ message = errorMessage } else { message = "No error" } // 使用三目運(yùn)算符 let message2 = errorMessage == nil ? "No error" : errorMessage! // 注意: 此時(shí)使用errorMessage需要強(qiáng)制解包.以保證message2是一個(gè)String,而非String? // 三目運(yùn)算符?:的實(shí)質(zhì)就是一個(gè)if else // 使用 ?? let message3 = errorMessage ?? "No error" // 注意: 此時(shí)使用errorMessage不需要強(qiáng)制解包. // ??符號(hào)已經(jīng)保證了訪(fǎng)問(wèn)到errorMessage時(shí), errorMessage不是nil // Swift將為我們自動(dòng)解包, 保證message2永遠(yuǎn)是一個(gè)String, 而不是String? //這種用法叫做 Nil-Coalescing |
以上所述是小編給大家介紹的swift 可選型的使用詳解,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)服務(wù)器之家網(wǎng)站的支持!
原文鏈接:http://blog.csdn.net/u012903898/article/details/52917282