iT邦幫忙

2022 iThome 鐵人賽

DAY 4
0
自我挑戰組

初入Swift新手村的旅程系列 第 4

Day04 Swift語法( 3 )可選類型Optional

  • 分享至 

  • xImage
  •  

可選類型

可選類型是Swift特有的一種類型,開發者在使用到某個變數時,可能會遇到任何類型的變數都會遇到空值的問題。Swift提供了一種包裝方式來對普通類型的變數進行Optional包裝,實現對於空值的監控。

var a: String
if a == nil{

}

這是還沒有進行Optional包裝,則系統則會呈現錯誤。

var a: String?
if a == nil{

}

此時程式則可以正常運行了,在普通類型後面加上 ?則可以將普通類型包裝為Optional類型。

Optional類型不會獨立存在,都會是附著於某資料型態上,可以是資料型態,可以是結構體。
Optional類型只有兩種值:

  • 如果附著類型對應的數值有具體的值,則為具體值的包裝。
  • 如果附著類型對應的數值沒有具體的值,則為nil。
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)

這樣就可以正常運行了。

接下來,是元組的介紹


上一篇
Day03 Swift語法( 2 ) 基本型別
下一篇
Day05 Swift語法( 4 )元組
系列文
初入Swift新手村的旅程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言