概述 - 為何選擇

通常在程式設計時,有必要區分具有值的變數和不具有值的變數。對於參考型別,例如 C 指標,可以使用特殊值(例如 null)來指示變數沒有值。對於內部型別,例如整數,則更難。可以使用指定值,例如 -1,但這取決於對值的解釋。它還消除了正常使用時的特殊值。

為了解決這個問題,Swift 允許將任何變數宣告為可選。這表示使用?要麼 ! 在型別之後(參見選項型別

例如,

var possiblyInt: Int?

宣告一個可能包含或不包含整數值的變數。

特殊值 nil 表示當前沒有為此變數分配值。

possiblyInt = 5      // PossiblyInt is now 5
possiblyInt = nil    // PossiblyInt is now unassigned

nil 還可用於測試指定值:

if possiblyInt != nil {
    print("possiblyInt has the value \(possiblyInt!)")
}

請注意在 print 語句中使用 !解包可選值。

作為可選項的常見用法的示例,請考慮從包含數字的字串返回整數的函式; 字串可能包含非數字字元,甚至可能為空。

返回簡單 Int 的函式如何表示失敗?它不能通過返回任何特定值來這樣做,因為這會阻止從字串中解析該值。

var someInt
someInt = parseInt("not an integer") // How would this function indicate failure?

但是,在 Swift 中,該函式可以簡單地返回一個可選的 Int。然後失敗由 nil 的返回值表示。

var someInt?
someInt = parseInt("not an integer")  // This function returns nil if parsing fails
if someInt == nil {
    print("That isn't a valid integer")
}