为什么在Swift中使用通配符(_)?

时间:2016-06-07 17:37:49

标签: swift for-loop iterator wildcard operator-keyword

通过Swift的Apple文档,我设计了一个for循环,创建了5个按钮,在5星评级功能中充当“星星”。

我注意到for循环的构造如下:

for _ in 0...<5 

在对此的解释中,Apple提到您可以在不需要知道当前正在执行循环的哪个迭代时使用通配符_运算符。

但不知道迭代的优点是什么?这是一个节省内存的问题优化吗?是否存在您不想知道迭代的情况?

4 个答案:

答案 0 :(得分:4)

通常,未使用的变量会将语义开销添加到代码中。当有人读取您的代码时,他们需要努力了解每行和标识符的功能,以便他们能够准确预测更改代码的影响。通配符运算符允许您传达语言语法所需的值与后面的代码无关(实际上甚至没有引用)。

在您的具体示例中,循环可能需要执行一定次数,但如果您希望在每次迭代时执行 exact 相同的操作,则迭代计数无关紧要。它并不常见,但它确实发生了。在这种情况下,语义开销很低,但它有意义(你从一开始就明确表示你打算每次都做同样的事情),并且这是一个很好的习惯。

答案 1 :(得分:3)

for循环索引需要存储在内存中,因此不会用作任何类型的内存优化。

我认为最重要的是它很容易向代码的读者传达循环索引并不重要。

此外,它可以防止您不得不提出一些任意虚拟变量名称。当你在循环内部进行调试时,它也会对你的名字空间进行整理,因为你不会显示这个虚拟变量。

答案 2 :(得分:3)

  

是否有某种情况您不想知道迭代?

当然可以。考虑:

func echo(_ s:String, times:Int) -> String {
    var result = ""
    for _ in 1...times { result += s }
    return result
}

如何写它?

答案 3 :(得分:1)

这不一定是知道迭代。当您不需要知道循环内的元素时,您正在迭代。下划线是占位符 - 正如下划线是声明中禁止外部化名称的符号。有关详细信息,请查看this SO Thread