未使用的变量和' _'

时间:2016-07-29 20:39:11

标签: swift

我正在使用learnxinyminutes.com

快速学习

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

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

据我所知,如果您从未声明变量,swift希望您使用下划线,但1)为什么要声明您从未使用过的变量? 2)如果您使用_,有没有办法获取这些值。并且,3)如果是这样,怎么样?

3 个答案:

答案 0 :(得分:2)

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

一般来说你没有!在某些情况下,您可能会想要,例如Danny Buonocore给出的示例。另一个例子可能是这样的:假设你想在做某事之前检查变量是否为非零,尽管你不需要为后续代码使用该变量。 (在这些情况下,保护声明可能更有用)。

if let _ = titleString {
// Do something that doesn't use titleString, but where it being non-nil means this operation is valid
}

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

func externalizedParameters(first: Int?, second: Int?) {
...
}

使用externalizedParameters(5, second: 6)进行调用。

但是如果你正在做一些微不足道的事情,并且函数名已经明确了两个参数是什么,例如使用交换操作,你可能不想强制调用者显式地声明第二个参数的名称。在这种情况下,您可以使用“_”,因为您不关心该外化参数的名称:

func swap(first: Int?, _ second: Int?) {
    ...
}

然后可以将其称为swap(5, 6),而不是swap(5, second: 6)

2)如果使用_,有没有办法获取这些值。 &安培; 3)如果是这样,怎么样?

没有。如果要使用该值,则需要命名变量。

答案 1 :(得分:1)

一个例子是你不一定需要索引的循环。

for _ in 0..<10 {

}

在swift中,您还可以外部化参数的名称。这允许调用者按名称传递,而不是命令:

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

}

myFunction(param2: "second value", param1: "first value");

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

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

}

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

答案 2 :(得分:0)

如果您需要使用变量中的值,请使用名称而不是from itertools import count dict([(a,[list(d.keys())[i] for i,j in zip(count(), d.values())if j==a in set(d.values())]) 声明它。下划线说,我知道这个调用会返回一个值,但我们不会使用它,所以它不需要名字。 Swift会针对未使用的函数调用结果发出警告,因此这是一种抑制该警告的方法。