Swift 2:永远不会使用不可变值X考虑用'_'替换

时间:2015-06-23 12:03:33

标签: swift2

在我的旧代码的几个案例中,我收到了警告:

  

永远不会使用不可变值X考虑替换为'_'

例如,如果我检查具有关联对象的枚举(但在这种情况下我不使用该对象),或者如果我使用'If let'构造来检查对象是否是没有。

通过这些警告并进行更改并不会让我感到困扰,但我想知道是否有人知道为什么会这样做 - 为什么还要警告我们呢?它会以任何方式影响性能吗?

5 个答案:

答案 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希望变量未被使用。希望这可以帮助。一旦使用它,错误就会消失。我已经反复尝试和研究了它,实际上它每次都消失了。