解释在 Swift 语言中解包可选变量的各种方法
始终建议将变量声明为可选变量,这应该是开发人员的首选。如果变量可能无效(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 语言中,每种方法都可以用于不同的目的。始终建议使用安全的方法来解包可选项,以防止应用程序发生不必要的崩溃。