概述 - 为何选择

通常在编程时,有必要区分具有值的变量和不具有值的变量。对于参考类型,例如 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")
}