swift 可選型的使用詳解
一、基本用法
可選性是Swift提供的一個(gè)特殊類型,它為我們編寫程序提供便利的條件
swift是強(qiáng)類型語言,當(dāng)我們需要使用一個(gè)變量,既可以為String,也可以為nil時(shí),這時(shí)候就需要我們使用可選型。
// 使用特殊值作為“無”可能產(chǎn)生歧義 //var errorCode = 404 //errorCode = 0 // 使用可選型 var errorCode:Int? = 404 print( errorCode ) errorCode = nil print( errorCode ) var color: UIColor? = nil // Int? 和 Int 不是一種類型 let imInt = 405 errorCode = imInt //imInt = errorCode // 必須顯示地聲明可選型的類型 //var imOptional = nil var imOptional: String? = nil
二、可選型解包使用
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有變化)
//多層解包(swift 2.0使用)
if let errorCode = errorCode , errorMessage = errorMessage{
"The errorCode is " + errorCode + "\nThe errorMessage is " + errorMessage
}
//以上多層解包方法在swift3.0中應(yīng)寫為
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)寫為
// where
if let errorCode = errorCode , let errorMessage = errorMessage , errorCode == "404"{
print("Page not found")
}
四、Optional chaining的使用
可選型?這種寫法叫做Optional chaining
這種方法可以進(jìn)行嘗試解包,使代碼簡(jiǎn)潔
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類型。此時(shí)為強(qiáng)制解包,容易出現(xiàn)錯(cuò)誤
五、Nil-Coalescing 的使用
// 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)保證了訪問到errorMessage時(shí), errorMessage不是nil
// Swift將為我們自動(dòng)解包, 保證message2永遠(yuǎn)是一個(gè)String, 而不是String?
//這種用法叫做 Nil-Coalescing
以上所述是小編給大家介紹的swift 可選型的使用詳解,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
Swift中的類class與結(jié)構(gòu)體struct體學(xué)習(xí)筆記
和C++一樣,Swfit中同時(shí)擁有類與結(jié)構(gòu)體,能夠充分滿足開發(fā)者面向?qū)ο蠛兔嫦蜻^程編程的需求,這里我們就來看一下Swift中的類class與結(jié)構(gòu)體struct體學(xué)習(xí)筆記2016-07-07
Combine中錯(cuò)誤處理和Scheduler使用詳解
這篇文章主要為大家介紹了Combine中錯(cuò)誤處理和Scheduler使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
Swift踩坑實(shí)戰(zhàn)之一個(gè)字符引發(fā)的Crash
swift通常都是通過對(duì)應(yīng)的signal來捕獲crash,下面這篇文章主要給大家介紹了關(guān)于Swift踩坑實(shí)戰(zhàn)之一個(gè)字符引發(fā)的Crash的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-02-02

