在swift開發(fā)中一些人可能會糾結(jié) 變量后跟“ 排嫌?”還是“ !”呢缰犁。那么今天這篇文章就帶你一探究竟淳地!OK,Let's Go!
其實(shí)很簡單:
帅容? 表示變量可以為 nil
颇象! 表示變量一定不為nil
1.可選型Optional
swift設(shè)計(jì)師認(rèn)為我們不應(yīng)該用同樣一種類型中的某個(gè)特殊的值來代表沒有這個(gè)概念,比如說我們不應(yīng)該用Int中的0來代表沒有并徘,而應(yīng)該用一個(gè)統(tǒng)一的值nil來代表沒有遣钳。nil是一個(gè)單獨(dú)的類型,不是0麦乞,不是一個(gè)字符串蕴茴。nil這種類型一定要和其他類型共存劝评。
可選型一般用var變量來修飾,例如var imOptional: String? = "hello" 倦淀, 如圖所示:
屏幕快照 2016-09-14 下午11.55.55.png
2.可選型的解包
可選型是不能直接使用蒋畜,因?yàn)榭蛇x型可能為空。
(1)需要解包
if let errorCode = errorCode {
"The errorCode is " + errorCode
}
(2)一次性解包多個(gè)變量
if let errorCode = errorCode,errorMsg = errorMsg{
"The errorCode" + errorCode + "The errMsg is" + errorMsg
}
(3)加入條件篩選
if let errorCode = errorCode,errorMsg = errorMsg where errorCode == "404"{
"The errorCode" + errorCode + "The errMsg is" + errorMsg
}
3.Optional Channel
errorMsg?.uppercaseString 的意思是對errorMsg解包撞叽,如果errorMsg不為nil則執(zhí)行語句姻成,邏輯上等于上述if語句
errorMsg!.uppercaseString 與errorMsg?.uppercaseString是完全不同的意思。在這里非常確定errorMsg不為nil能扒,但是如果errorMsg為nil佣渴,程序就會崩潰
4.nil coalesce
對于 var errorMsg: String? = nil 下面3鐘方法邏輯是一樣的
//1
let message: String
if let errorMsg = errorMsg {
message = errorMsg
}else {
message = "NO error"
}
//2
let message2 = errorMsg == nil ? "NO error" : errorMsg
//3
let message3 = errorMsg ?? "NO Error"
總結(jié):希望對大家 理解Swift中的 ?和 初斑!有所幫助