變量或常量在某些情況下可能表示的是未被賦值的情況俱尼,若直接不對某一類型的變量賦值薄榛,會(huì)提示該變量未初始化不可用者吁。這時(shí)就需要可選型窘俺,可選型有兩種值,一種是變量類型的值复凳,另一種是未賦值類型 nil瘤泪。聲明變量時(shí),在變量類型的后面加一個(gè)?
育八,則該變量為可選型对途。
var optionalString: String?
print(optionalString)
輸出結(jié)果:
nil
在很多情況下,需要對可選型進(jìn)行是否有值的邏輯判斷髓棋,這時(shí)可以配合let
使用
var optionalName: String? = "Mark"
if let name = optionalName {
print("Hello \(name)!")
} else {
print("Hello!")
}
按目前理解实檀,其實(shí)效果等同于
var optionalName: String? = "Mark"
if optionalName != nil {
print("Hello \(optionalName!)!")
} else {
print("Hello!")
}
在變量名后加!
相當(dāng)于對可選型拆包惶洲,去取其真正的值,如果該可選型數(shù)據(jù)的值是 nil膳犹,則此時(shí)程序會(huì)崩潰恬吕。所以配合是否有值的判斷,在確認(rèn)有值的情況下才可對其強(qiáng)制拆包须床。
為了能夠方便地訪問可選型铐料,我們可以將可選型后面的?
換成!
,這種方式稱為隱式拆包豺旬,因?yàn)樵诓鸢鼤r(shí)在變量或常量后面不需要再加!
钠惩。
var optionalName: String! = "Mark"
if optionalName != nil {
print("Hello \(optionalName)!")
} else {
print("Hello!")
}