“从不使用初始化不可变值'单元'的' - '”赋值;考虑将作业替换为“_”或将其删除

时间:2018-06-12 01:37:05

标签: swift

func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
    let cell = tableView.cellForRow(at: indexPath)
}

当我使用此代码时,会出现警告。

  

永远不会使用不可变值'cell'的初始化;考虑将作业替换为“_”或将其删除

我知道我从未使用过单元格,但我想问的问题是“赋值给'_'”,赋值给' - '是为了什么?我对Swift并不熟悉。

2 个答案:

答案 0 :(得分:1)

警告意味着它的内容。你已经初始化了常量“单元格”,但没有对它做任何事情。因此,您将收到警告,直到您在其他地方使用它。这是Xcode如何跟踪变量的一部分。

编译器建议“_”的原因仅仅是因为您经常需要确保某些引用不是nil。在这些情况下,您可以通过代码确定某些内容是否为零

if let _ = someConstantThatMayBeNil {...}

然后你可以在括号内使用“someConstantThatMayBeNil”并确定它不是零。如果它是零,而你没有检查,你的程序就会崩溃。

我建议使用Apple的App Development With Swift来获得良好的使用基础。

答案 1 :(得分:0)

所以你想知道为什么Swift建议你用cell替换_

在Swift中,您可以在赋值语句中执行pattern matching,例如:

let (x, y) = (1, 2)

(x, y)部分是元组模式。它创建了两个变量xyx的值为1y的值为2。看看变量和值如何相互匹配?

_也是一种模式,称为通配符模式。通过写_,你基本上是在说“放弃价值”。所以:

let _ = tableView.cellForRow(at: indexPath)

表示不会创建任何变量,但仍会评估tableView.cellForRow(at: indexPath)。该方法将被调用。

Swift建议你这样做,因为它看到cell没有被使用,它认为你可能只想要cellForRow(at:)的副作用。因此,它建议“为什么只为副作用创建一个新变量?无论如何你可能不需要返回值,用通配符模式替换它!”。