解释Swift语言中解包可选值的各种方法


将变量声明为可选值总是推荐的做法,也应该是开发人员的首选。如果变量可能无效(nil或其他类型),则应将其标记为可选值。

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

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

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

可选值

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

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

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

解包可选值

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

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

  • 强制解包

  • 可选绑定

  • 可选链

  • 使用空合并运算符

强制解包(不推荐)

示例

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

var errorMessage: String? = "Invalid URL found"
print(errorMessage!)

输出

Invalid URL found

如果您确定可选变量包含值,则可以使用它(!),否则,如果变量不包含值,则应用程序将崩溃。简单的感叹号意味着:“我知道这个可选值肯定有值;请使用它。”

示例

有一种方法可以先检查,然后像下面这样使用感叹号和可选变量

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)
// here, getting the address using optional chaining.
if let address = martin?.college?.address {
   print("address: \(address)")
} else {
   print("address not found")
}

输出

address not found

使用空合并运算符

这是一个非常简单简短的表示法,可以避免if-else块语句。如果在可选变量中找到nil值,我们可以返回一个默认值。

示例

在此,在非nil值的情况下使用解包的值。否则,将使用默认值。

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

输出

Default value

结论

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

更新于:2022年12月21日

528 次浏览

启动您的职业生涯

完成课程获得认证

开始学习
广告