在我的旧代码的几个案例中,我收到了警告:
永远不会使用不可变值X考虑替换为'_'
例如,如果我检查具有关联对象的枚举(但在这种情况下我不使用该对象),或者如果我使用'If let'构造来检查对象是否是没有。
通过这些警告并进行更改并不会让我感到困扰,但我想知道是否有人知道为什么会这样做 - 为什么还要警告我们呢?它会以任何方式影响性能吗?
答案 0 :(得分:19)
永远不会使用不可变值X考虑替换为' _'
此警告即将发布,因为您在声明后未使用变量。只需忽略警告并继续编写代码并使用您的对象,它就会消失。
Swift 2是一种非常敏感的语言,它会在每一步都给你警告。
我在这里解释一个警告任何对象的简单演示: - 1。永远不会使用不可变值X考虑替换为' _' 当你不使用对象并仅声明它时,它就会出现。 例如: -
template <typename T, int T::* arg>
struct tux {
static_assert(std::is_convertible<int T::*, int fuu::*>::value,
"T must be an unambiguous accessible base of fuu");
// note that this still works
// however, you won't be able to use it as a template argument
static constexpr int fuu::* pm = arg;
};
2. 变量&name; nameImg&#39;写入,但从未阅读。 当你为对象分配任何值但你仍然没有在任何其他对象中使用它时,它会出现。 实施例 -
var nameImg:String = "";
3。如果您为对象分配任何值并在另一个对象中使用它,无警告将会出现;)。
前 -
var nameImg:String = "";
if(action==1){
nameImg = "navTab";
}
else{
nameImg = "back";
}
答案 1 :(得分:11)
建议使用这些更改,因为如果您根本不使用这些变量,则应考虑将其替换为“_”。所以你(和其他人)以后可以更快地理解你的意图。
就性能而言,它可能只是一个小小的改进,你根本无法注意到。在编译和优化代码期间也适用相同的情况。
答案 2 :(得分:2)
这是因为你的价值在宣布之后从未使用过,我不久前就遇到了同样的问题。
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
let row = indexPath.row <-----
我发现只是在发生错误后才打印它。
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
let row = indexPath.row <---
print(row) <---
答案 3 :(得分:1)
通常,您应该在日常工作中免费警告。显而易见的原因是,如果您的代码产生数百个不那么重要的警告,您将错过真实的和重要警告。
您所描述的案例最好以这种方式解决:而不是使用if let myObject = myObject
,您最好使用:
if myObject != nil
通过这种方式,您可以清楚想要做什么。
答案 4 :(得分:0)
出现此警告是因为Xcode希望您更改变量。 Xcode希望变量未被使用。希望这可以帮助。一旦使用它,错误就会消失。我已经反复尝试和研究了它,实际上它每次都消失了。