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