Swift 未使用的变量和'_';

Swift 未使用的变量和'_';,swift,Swift,我正在学习使用swift 我很难理解网站上示例(如下)的一个组成部分,即在let语句中使用下划线而不是变量名 // Variadic Args func setup(numbers: Int...) { let _ = numbers[0] let _ = numbers.count } 我知道swift希望您在从不声明变量的情况下使用下划线,但1)为什么要声明从不使用的变量?2)如果您使用\uuu,是否有办法获取这些值。3)如果是这样,怎么做?一个例子是一个循环,您不一定需要

我正在学习使用swift

我很难理解网站上示例(如下)的一个组成部分,即在
let
语句中使用下划线而不是变量名

// Variadic Args
func setup(numbers: Int...) {
    let _ = numbers[0]
    let _ = numbers.count
}

我知道swift希望您在从不声明变量的情况下使用下划线,但1)为什么要声明从不使用的变量?2)如果您使用
\uuu
,是否有办法获取这些值。3)如果是这样,怎么做?

一个例子是一个循环,您不一定需要索引

for _ in 0..<10 {

}
如果不想外部化参数名称,可以在其前面加下划线,如下所示:

func myFunction(param1:String, _ param2:String) {

}

在这种情况下,必须将要设置param2的值作为第二个参数传递,并且不能使用第一个示例中所示的命名方案。

如果需要在变量内部使用该值,请使用名称而不是
声明该值。下划线表示,我知道这个调用返回一个值,但我们不打算使用它,所以它不需要名称。Swift会对未使用的函数调用结果发出警告,因此这是一种抑制该警告的方法。

1)为什么要声明从未使用过的变量

一般来说你不会!不过,在某些情况下,您可能会想这样做,例如Danny Buonocore给出的示例。另一个例子可能是这样的:假设您希望在执行某项操作之前检查某个变量是否为非nil,尽管后续代码不需要该变量。(在这些情况下,守卫声明可能更有用)

另一个例子是Swift函数。调用函数时,必须标识第二个、第三个等参数的名称。例如:

func externalizedParameters(first: Int?, second: Int?) {
...
}
这是使用
外部化参数(5,秒:6)
调用的

但是,如果您正在做一些琐碎的事情,并且函数名已经明确了这两个参数是什么,例如使用交换操作,那么您可能不希望强制调用方显式地声明第二个参数的名称。在这种情况下,您可以使用“\u1”,因为您不关心外部化参数的名称:

func swap(first: Int?, _ second: Int?) {
    ...
}
这可以称为
swap(5,6)
,而不是
swap(5,秒:6)

2) 如果您使用&,有没有办法获取这些值3) 如果是,怎么做


不需要。如果您想使用该值,您需要命名变量。

据我所知,它只是试图证明
数字
是一个数组(您可以对它进行索引,它有一个
.count
),而不实际使用这些值(因此将它们与
一起丢弃).这个问题中被接受的答案的可能重复也提供了进一步的深刻见解。它不是直接重复的,因为我有多个关于下划线的问题,但未来的用户应该同时引用这两个问题。
func externalizedParameters(first: Int?, second: Int?) {
...
}
func swap(first: Int?, _ second: Int?) {
    ...
}