# 一次搞懂 Optional in Swift ###### tags: `想知道嗎` --- ## What is optional? - 任何型別加上 "?" 即為 Optional 型別 - Optional - 有值 - 空值 (nil) - Int ≠ Int?, String ≠ String?... --- ## Why optional? - Swift 是強型別的語言 - 設置變數只會出現以下兩種狀況: 1. 給定初始值 ```swift var number: Int = 0 ``` 2. 設定為 optional 型別 ```swift var number: Int? ``` --- Optional 的狀態可想成將變數包裝起來,在未拆開前,並不知道裡面是有值或是空值的狀態。 --- ## 解包 (Unwrapping) 當我們需要使用 optional 時就必須拆開包裝,實際的做法有三種: 1. 強制解包 "!" 2. if 解包 3. if let / guard let 解包 --- ### 強制解包 "!" ```swift var number: Int? number = 10 print(number!) // Prints 10 ``` --- ### if 解包 方法一: ```swift var number: Int? number = 10 if number != nil { print("The number is \(number!).") // Prints "The number is 10." } ``` 方法二: ```swift var number: Int? number = 10 if number != nil { let newNumber = number print("The number is \(newNumber).") // Prints "The number is 10." } ``` --- ### if let / guard let 解包 if let: ```swift var number: Int? number = 10 if let newNumber = number { print("The number is \(newNumber).") // Prints "The number is 10." } ``` guard let: ```swift func showNumber(_ number: Int?) { guard let newNumber = number else { return } print("The number is \(newNumber).") } showNumber(10) // Prints "The number is 10." ```