我正在使用learnxinyminutes.com
快速学习我很难理解网站上示例的组成部分(下面),即在let
语句中使用下划线而不是变量名。
// Variadic Args
func setup(numbers: Int...) {
let _ = numbers[0]
let _ = numbers.count
}
据我所知,如果您从未声明变量,swift希望您使用下划线,但1)为什么要声明您从未使用过的变量? 2)如果您使用_
,有没有办法获取这些值。并且,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会针对未使用的函数调用结果发出警告,因此这是一种抑制该警告的方法。