解释在 Swift 语言中解包可选变量的各种方法

swiftserver side programmingprogramming

始终建议将变量声明为可选变量,这应该是开发人员的首选。如果变量可能无效(nil 或其他类型),则应将其标记为可选变量。

作为开发人员,我们认为编写安全可靠的代码是我们的责任。为了实现这一点,Swift 为我们提供了许多概念,可选变量就是其中之一。

可选变量可能包含 nil 值,因此我们必须安全地获取其值。有几种方法可以解包可选变量的值。让我们来了解一下。

首先,我们需要了解 Swift 中什么是可选变量。

可选变量

当我们从其他来源(如后端服务器)接收值时,该值在初始点可能包含有效值或不包含任何值。在这种情况下,您可以使用可选项来表示具有两种可能情况的变量 - 要么有值,要么根本没有值。

var possibleNumber = "450"
var convertedNumber = Int(possibleNumber)

在上面的例子中,有一个输入字符串,我们正在将其转换为 Int。但是,此字符串可能是也可能不是有效的整数。在这种情况下,一旦我们使用 Int() 函数将此字符串转换为整数,它将返回一个可选的整数值。这意味着输出可以是 nil 或有效的整数值。

解包可选变量

从可选变量获取值(有效或 nil)称为解包。要使用可选变量的强制转换值,我们必须安全地进行转换。

值可以通过多种方式获取,但每种方法的使用情况都不同。

  • 使用强制解包

  • 使用可选绑定

  • 使用可选链

  • 使用 nil-coalescing 运算符

使用强制解包(不推荐)

示例

在此方法中,您可以通过在变量名后添加感叹号 (!) 来访问值。如下所示 −

var errorMessage: String? = "发现无效 URL"
print(errorMessage!)

输出

发现无效 URL

如果您确定可选变量包含值,则可以使用它(!),否则,如果变量不包含值,应用程序将崩溃。感叹号简单地表示"我知道这个可选项肯定有一个值;请使用它。"

示例

有一种方法可以先检查,然后将感叹号与可选变量一起使用,如下所示:

var errorMessage: String? = "Invalid URL found"
if errorMessage != nil {
   print("error message is not nil: \(errorMessage!)")
}

输出

error message is not nil: Invalid URL found

解释

首先,我们声明一个字符串类型的可选变量。接下来,我们检查变量是否不等于 nil。如果不为 nil,则打印变量的值。这样,您的应用就不会崩溃,因为您已经检查过了。

可选绑定(推荐)

要读取可选变量的值,这是推荐的方法。在此方法中,您将检查变量是否有值。如果找到值,则将该值保存在局部常量或变量中。

可选绑定可用于有条件地执行代码、控制循环的执行以及从当前范围创建早期退出路径。可以在一个语句中使用多个可选绑定,并且可以将可选绑定与可选链结合使用,以使代码更紧凑。

示例

让我们看一个例子 -

var errorMessage: String? = "Invalid URL found"
if let message = errorMessage {
   print("Error message: \(message)")
}

输出

Error message: Invalid URL found

在这里,您将值存储在临时常量"message"中,然后使用它。如果 errorMessage 没有值或为 nil,则 if 条件将不为真。因此,您可以看到这是一种从可选变量中解包值的非常安全的方法。

使用可选链

示例

当您一次处理多个可选变量时,您可能需要使用多个 if-let 语句。为了避免这种混乱,我们可以使用可选链来解包值。

struct College {
   let name: String
   var address: String?
}
struct Student {
   let name: String
   let grade: Int
   var college: College?
}
let martin: Student? = Student(name: "Martin", grade: 5)
// 此处,使用可选链获取地址。
if let address = martin?.college?.address {
print("address: \(address)")
} else {
print("address not found")
}

输出

address not found

使用 Nil-Coalescing 运算符

这是一个非常简单且简短的符号,可以避免使用 if-else 块语句。如果您在可选变量中发现 nil 值,我们可以返回默认值。

示例

在此,如果值非零,则使用未包装的值。否则,将使用默认值。

var name: String?
let nameString = name ?? "Default value"
print(nameString)

输出

Default value

结论

为了处理可选项,我们可以采用各种方法来解包可选项。在 Swift 语言中,每种方法都可以用于不同的目的。始终建议使用安全的方法来解包可选项,以防止应用程序发生不必要的崩溃。


相关文章