0%

Swift 012 Optional Chaining

可選中的問號與驚嘆號

您可以通過在要調用其屬性的方法或下標的可選值之後放置問號(?)來指定可選,如果可選值不是nil即可使用。這非常類似於將感嘆號(!)放在可選值之後以強制展開其值。主要區別在於,問號時會正常失敗nil。驚嘆號會強制展開會觸發運行時錯誤nil

1
2
3
4
5
6
7
8
9
10
func helloYear(year: Int) -> String? {
switch year {
case 2020: return "Hello 2020"
case 2021: return "Hello 2021"
default: return nil
}
}

let msg = helloYear(year: 2020)
print("\(msg) swift!")

如果我們要再回傳回來的參數後面使用一些函式來改變參數的時候,我們可以加上?來確保是否有參數可以調用,如果是nil將會出現錯誤訊息。

1
2
3
4
5
6
7
8
9
10
func helloYear2(year: Int) -> String? {
switch year {
case 2020: return "Hello 2020"
case 2021: return "Hello 2021"
default: return nil
}
}

let msg2 = helloYear2(year: 203)?.uppercased()
print("\(msg2) swift!")

如果想讓程式碼更加的安全,可以在後面加上??,當參數為nil時,將會使用??後面所設置的參數。

1
2
3
4
5
6
7
8
9
10
func helloYear2(year: Int) -> String? {
switch year {
case 2020: return "Hello 2020"
case 2021: return "Hello 2021"
default: return nil
}
}

let msg2 = helloYear2(year: 203) ?? "unknown"
print("\(msg2) swift!")