为什么在 Swift 中需要下划线?
在 Swift 中,下划线有多种用途,可用于不同的目的。以下是一些示例。
忽略不必要的循环变量或返回值。
函数调用中缺少外部参数的标识符。
即使它们最初被指定为常量,也会导致变量可变。
在处理错误时忽略元组组件或使用丢弃值。
忽略值
要在 Swift 中忽略函数或方法返回的值,请使用下划线。例如,如果您只关心操作的成功或失败,可以编写类似这样的代码。这是您在代码中最常使用的情况。
语法
if _ = someFunction() {
// 如果函数执行成功,则执行某些操作
} else {
// 如果函数执行失败,则执行某些操作
}
示例
在此示例中,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) {
// 使用值执行某些操作
}
示例
在此示例中,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("所有值:\(point)")
print("x:\(x), z:\(z)")
输出
所有值:(x: 10, y: 20, z: 30) x: 10, z: 30
忽略抛出值
虽然使用 do-catch 语句来管理代码中的错误,但您可以忽略抛出的值。
示例
在此示例中,我们使用下划线来忽略 doSomething() 函数可能抛出的错误。我们在 do 代码块中调用该函数,并使用 catch 代码块来处理可能抛出的任何错误。由于我们不关心具体的错误值,因此可以使用下划线来忽略它,只打印一条通用的失败消息。
import Foundation
func doSomething() throws -> Int {
// 做一些可能会引发错误的事情
return 42
}
do {
let result = try doSomething()
print("Success: \(result)")
} catch _ {
print("Failure")
}
输出
Success: 42
在 Swift 中使用下划线时,请牢记以下额外注意事项
下划线并非必需。代码通常可以在不使用下划线的情况下编写,并且仍然产生相同的结果。但是,使用下划线可以帮助您编写更清晰、更简洁的代码。
如果过度或不当使用下划线,您的代码可能会变得更加难以理解。例如,在函数调用中使用下划线隐藏关键的错误编号可能会导致错误或异常行为。
下划线的含义可能因使用情况而异。例如,在 switch 表达式中用作通配符模式的下划线和用于忽略循环变量的下划线具有不同的含义。
下划线可以与其他语言特性结合使用,以创建强大的抽象。例如,将下划线与闭包语法结合使用可以创建非常简洁易读的代码。
下划线并非 Swift 独有,在许多其他编程语言中也用于类似用途。
结论
使用下划线可以使您的代码更简洁易读,尤其是在您不需要使用特定值或参数名称时。谨慎使用下划线非常重要,避免以可能使代码复杂化的方式使用它们。在代码中使用下划线应该使代码更清晰、更易于维护,就像任何语言特性一样。