在 Swift 中为什么需要下划线?


在 Swift 中,下划线有多种不同的用途,用于不同的目的。以下是一些示例。

  • 忽略不必要的循环变量或返回值。

  • 在函数调用中省略外部参数的标识符。

  • 即使它们最初被指定为常量,也可以使变量可变。

  • 忽略元组组件或在管理错误时使用丢弃值。

忽略值

要忽略 Swift 中函数或方法返回的值,请使用下划线。例如,如果您只关心操作的成功或失败,则可以编写如下内容。这是您在代码中最常使用的情况。

语法

if _ = someFunction() {
   // do something if the function succeeds
} else {
   // do something if the function failed
}

示例

在此示例中,greetingMessage() 函数返回一个字符串值,但我们通过在条件语句中使用下划线来忽略它。相反,我们只是根据函数是否返回值来检查函数成功还是失败。

import Foundation
func greetingMessage(fullName: String) -> String? {
   return "Good morning, \(fullName)"
}
if let _ = greetingMessage(fullName: "Alex Murphy") {
   print("Function successfully executed.")
} else {
   print("Function failed to execute.")
}

输出

Function successfully executed.

省略外部参数名称

在 Swift 中,您可以使用下划线来省略函数或方法的外部参数名称。此概念广泛用于 iOS 应用程序中。例如,如果您有如下函数:

语法

func doSomething(_ value: Int) {
   // do something with the value
}

示例

在此示例中,greetingMessage() 函数接受一个名为 fullName 的字符串参数,但我们在函数声明中使用下划线省略了外部参数名称。当我们调用函数时,我们只需提供一个字符串值,而无需指定参数名称。

import Foundation
func greetingMessage(_ fullName: String) -> String? {
   return "Good morning, \(fullName)"
}
if let _ = greetingMessage("Alex Murphy") {
   print("Function successfully executed.")
} else {
   print("Function failed to execute.")
}

输出

Function successfully executed.

使变量可变

在 Swift 中,您可以使用下划线使变量可变。例如,如果您有如下常量:

示例

在此示例中,我们通过在变量名前添加下划线来创建一个名为 _x 的可变变量。我们用常量 x 的值初始化它。然后我们向 x 添加 10 并打印其值。由于 _x 是可变的,因此我们可以修改其值,即使它最初是从常量值派生的。

import Foundation
let x = 42
var _x = x
_x += 10
print(_x)

输出

52

忽略循环变量

在使用循环执行任何操作时,您可以忽略变量。

示例

在此示例中,我们使用下划线来忽略 for 循环中的循环变量。我们只是遍历 numbers 数组,并为数组中的每个元素递增 sum 变量。由于我们不需要使用循环变量(通常是整数索引),因此我们可以使用下划线来表示我们正在忽略它。

import Foundation
let numbers = [1, 2, 3, 4, 5]
var sum = 0
for _ in numbers {
   sum += 1
}
print("Number of elements: \(sum)")

输出

Number of elements: 5

忽略元组的一部分

元组将多个值组合在一起。为了使用特定值,您可以忽略元组的一部分。

示例

在此示例中,我们使用下划线来忽略元组的 y 组件。然后我们使用模式匹配来提取元组的 x 和 z 组件并将它们分配给局部变量。由于我们不需要 y 组件,因此我们可以使用下划线来忽略它。

import Foundation
let point = (x: 10, y: 20, z: 30)
let (x, _, z) = point
print("All values: \(point)")
print("x: \(x), z: \(z)")

输出

All values: (x: 10, y: 20, z: 30)
x: 10, z: 30

忽略抛出值

在使用 do-catch 语句管理代码中的错误时,您可以忽略抛出的值。

示例

在此示例中,我们使用下划线来忽略 doSomething() 函数可能抛出的错误。我们在 do 块中调用该函数,并使用 catch 块来处理可能抛出的任何错误。由于我们不关心特定的错误值,因此我们可以使用下划线来忽略它,并只打印一个通用的失败消息。

import Foundation
func doSomething() throws -> Int {
   // do something that might throw an error
   return 42
}
do {
   let result = try doSomething()
   print("Success: \(result)")
} catch _ {
   print("Failure")
}

输出

Success: 42

在 Swift 中使用下划线时,请牢记以下额外注意事项

  • 不需要下划线。代码通常可以在不使用下划线的情况下编写,并且仍然产生相同的结果。但是,使用下划线可以帮助您编写更易读和简洁的代码。

  • 如果您过度或不正确地使用下划线,您的代码可能会变得更难以理解。例如,使用下划线隐藏函数调用中重要的错误编号可能会导致错误或奇怪的行为。

  • 下划线根据其使用情况具有不同的含义。例如,在 switch 表达式中用作通配符模式的下划线与用于忽略循环变量的下划线具有不同的含义。

  • 下划线可以与其他语言特性结合使用以创建强大的抽象。例如,将下划线与闭包语法结合使用可以创建非常简洁易读的代码。

  • 下划线并非 Swift 独有,许多其他编程语言也出于类似目的使用下划线。

结论

通过使用下划线,尤其是在您不需要使用特定值或参数名称时,可以使您的代码更简洁、更易于阅读。重要的是要谨慎使用下划线,并避免以可能使代码复杂的方式使用它们。与任何语言特性一样,在代码中使用下划线应该使代码更清晰、更易于维护。

更新于: 2023年5月4日

2K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告