Swith 提出 Optional Type 概念,允許一個變數有空值存在,但 Optional Type 也必須付出代價,觀念上類似 Monad,必須解開後才能使用。
Version
Swift 5.10
Force Unwarping
var name: String?
name = "Sam"
if name != nil {
let message = "Hello \(name!)"
print(message)
}
- 因為 Optional Type 允許空值,因此無法以 Type Inference 推斷型別,需在宣告變數時實際定義型別,並在最後加上
?
表示為 Optional Type - Optional Type 無法直接使用,可先判斷其時否為
nil
後,再使用!
的 Force Unwarping 強制從 Monad 內取出值
Optional Binding
var name: String?
name = "Sam"
if let name = name {
let message = "Hello \(name)"
print(message)
}
- 使用
if let
重新對name
加以定義,若name
不是nil
,則將實際值重新定義給name
,在{}
則可保證使用到非 Optional 值
Conclusion
- Optional Type 屬於 Swift 較特殊概念,允許使用空值,但是將其包在 Monad 內,必須取出後才可使用
- Optional Binding 則屬 syntax sugar,讓原本需要判斷
nil
改成可直接 binding