可選類型是Swift特有的一種類型,開發者在使用到某個變數時,可能會遇到任何類型的變數都會遇到空值的問題。Swift提供了一種包裝方式來對普通類型的變數進行Optional包裝,實現對於空值的監控。
var a: String
if a == nil{
}
這是還沒有進行Optional包裝,則系統則會呈現錯誤。
var a: String?
if a == nil{
}
此時程式則可以正常運行了,在普通類型後面加上 ?則可以將普通類型包裝為Optional類型。
Optional類型不會獨立存在,都會是附著於某資料型態上,可以是資料型態,可以是結構體。
Optional類型只有兩種值:
var a: Int? = 10
var b: Int? = nil
print(a)
// 印出Optional(10)
print(b)
// 印出nil
Optional類型是對普通類型的一種包裝,因武使用的時候需要對其進行拆包的操作,這時則使用到 ! 來進行拆包。
var a: Int? = 10
var b: Int? = nil
print(a!)
// 印出10
print(b)
// 印出nil
變數a的後面加上了 ! 來進行拆包,印出整數10,而變數b還是nil。
Swift中還提供了一種if-let的語法結構來進行Optional可選類型的綁定
var obj: String? = "HS"
//進行 if - let 綁定
if let tmp = obj {
print(tmp)
}
else{
obj = "HS"
print(obj!)
}
上面的程式碼,是指 obj 有值的話,則 if - let 結構將會創建一個臨時常數 tmp 來接收 obj 拆包後的值,並且執行 if 為真時所對應的程式碼,如果 obj 為 nil ,則會進入 if 為假的程式碼中,開發者可以將obj重新給於值做使用,這種 if - let 結構完成了三個過程,為判斷,拆包,綁定拆包後的值到臨時常數。
if - let 結構也可以進行多個Optional類型值的綁定。之間用逗號隔開,
var obj1: String? = "HS"
var obj2: Int? = 10
//進行 if - let 綁定
if let tmp1 = obj1, let tmp2 = obj2 {
print(tmp1, tmp2)
}
多個Optional類型值的綁定時,只有所有都不是nil,才能綁定成功。
當我們明確某個變數的初始值為nil時,且之後一定會給於值,我們就可以進行隱式解析的可選值,在對這個變數進行使用,就不用進行拆包操作了。
var a: Int?
a = 3
print(a + 1)
會報錯,因為變數 a 沒有進行拆包
進行修改
var a: Int!
a = 3
print(a + 1)
這樣就可以正常運行了。
接下來,是元組的介紹