Swift 中的 Optional

2024 年 8 月 29 日 | 4 分钟阅读

Swift 可选类型是 Swift 编码的基础部分。可选类型用于将好代码与坏代码分开并防止崩溃。每种编程语言都有一些预防措施来避免崩溃。Swift 在这方面更实用,并且可选类型使您的代码免于崩溃

声明

每当您使用可选值时,即使您从未键入过单词 Optional,也会使用可选类型。Swift 的类型系统通常显示包装类型的名称以及问号 (?),而不是显示完整的类型名称。

例如,如果一个变量的类型为 Int?,它与 Optional 相同,只是另一种写法。 这种简写形式只是为了保持代码简单易懂。

请看以下示例。

在此,以下代码示例中 shortForm 和 longForm 的类型相同

Optional 要么不包含,要么包含某个值。Optional 允许存储 nil 作为值的缺失。Optional 是一个具有两种情况的通用枚举

  • Optional.none:它等同于 nil 字面量。
  • Optional.some(Wrapped):它存储一个包装值。

示例

输出

true

上述程序中的问号 (?) 表示它是一个可选变量。 如果您在变量声明的末尾看到一个问号,那么它肯定是一个可选变量,并且它可能包含也可能不包含一个值。 因此,在程序的某些部分,您不知道变量是否存在值,请将其标记为可选。

现在,看看这个例子

这里我们尝试打印变量 'numberOfStudents' 的值。

在这里,变量末尾的感叹号 (!) 用于解包该值。 但是,如果尝试执行代码,代码将会崩溃。 这是因为,您只是强制解包一个不包含值的可选变量。 如果变量中没有值,程序将崩溃。

为变量设置一个值

如果您在强制解包值之前为变量设置一个值,则代码不会崩溃,但这并不是一个好的编码习惯,而且是滥用可选变量。

输出

30

您可以在强制解包可选变量之前进行 nil 检查。

例如

现在,您的程序不会崩溃,因为您仅在进行 nil 检查后才强制解包可选变量。

上述方法将检查可选变量“numberOfStudents”是否包含某个值。 如果存在,它将被复制到一个名为 studentCount 的常量中,然后才会执行代码块。

强制解包

当您将变量定义为可选变量时,要从此变量中获取值,您必须解包它。 强制解包是将感叹号放在变量末尾的过程。

让我们检查一个例子来弄清楚。

示例:(在应用解包之前)

输出:当您执行上述代码时,它将给出以下输出

Optional("Hello World")

示例:(在应用解包之后)

现在,我们应用解包来获得变量的正确值。

输出

Hello World

自动解包

自动解包提供了一种方法,其中使用感叹号而不是问号来声明可选变量。 通过这种方式,变量将被自动解包,您无需在变量末尾使用任何进一步的感叹号来获取分配的值。

让我们看一个示例。

示例

输出

Hello World

Swift 可选绑定

可选绑定用于找出可选变量是否包含一个值,如果包含,则使该值可用作临时常量或变量。 您可以使用任何可选绑定控制结构,包括 if let、guard let 等。

让我们举个例子来看看 if 语句的可选绑定

示例

输出

The value of my string is - Hello world

下一个主题Swift 可选链