點燈坊

失くすものさえない今が強くなるチャンスよ

Optional Type 簡介

Sam Xiao's Avatar 2024-05-28

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