当前位置: 首页 > 面试题库 >

变量“ xxx”从未更改过,请考虑将其更改为“ let”

况嘉运
2023-03-14
问题内容

更新到xcode7-beta, 我遇到了一种新的警告。这是我的代码

override func layoutAttributesForElementsInRect(rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
    var attributes: [UICollectionViewLayoutAttributes]? = super.layoutAttributesForElementsInRect(rect)
    if let layoutInfo = self.layoutInfo {
        attributes?.append(layoutInfo)
    }
    return attributes
}

警告消息是 Variable 'attributes' was never mutated, consider changing to 'let' constant

为什么xcode说呢Variable 'attributes' was never mutated

问题更新

当我将代码更改为此时,警告消失了

override func layoutAttributesForElementsInRect(rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
    var attributes: [UICollectionViewLayoutAttributes]? = super.layoutAttributesForElementsInRect(rect)
    if let layoutInfo = self.layoutInfo {
        attributes!.append(layoutInfo)
    }
    return attributes
}

这样就可以将其拆开。但这可能不是一件好事吧?


问题答案:

他们在WWDC视频和发行说明中谈到了这一点。

一直以来,如果您使用let而不是在var任何时候都可以得到更好,更好的性能(更快的速度,更小的空间)。这告诉编译器该东西是 常量
,而不是变量,并且这一事实使编译器可以优化各种东西。

但是编译器无法做到这一点,除非您 let一切可能使用。它不会 var将a 更改为a 。let __

因此,在Swift
2中,编译器会在构建时进行更智能的分析,并警告您是否使用了本var该使用的位置let。最终,此功能将正常运行,这时您应该接受编译器的建议!



 类似资料:
  • 问题内容: 第一个System.out打印 2 并且应该打印,而第二个System打印 65 。我已经用这种语言编程了一年多了,据我所知这是不可能发生的!有什么帮助吗? 上面的代码在两行上都显示 9 。 问题答案: 当你这样做,之前仅仅是一个参考阵列, NO 新阵列已创建并分配给。因此,当您查看自己的价值时,基本上就是查看的价值,反之亦然。只是的别名。这就是为什么在第二张照片中您得到65。 检查该

  • 问题内容: 我有一个测试用例,可以访问浏览器并对其进行处理。但是我需要以编程方式更改某些文本框的输入内容。我有8个字符串和一个布尔值,表示测试需要正确运行。问题是,您必须先通过ant和构建过程运行测试用例,然后才能实际运行它。我希望能够构建它,将其放在设备上,然后在我调用它时以某种方式将数据传递给设备。但是我不知道那是否可能。我目前唯一想到的选择是编写一个快速的Java程序,将其写入文件,更改变量

  • 问题内容: 给定以下示例,为什么在所有情况下都未定义? 为什么undefined在所有这些示例中都输出?我不需要解决方法,我想知道为什么会这样。 注意:这是JavaScript异步性的典型问题。随时改进此问题,并添加更多简化的示例,社区可以识别。 问题答案: 一句话回答:异步性。 问题的答案 让我们首先跟踪常见行为。在所有示例中,都在函数内部修改了。该函数显然不会立即执行,而是被分配或作为参数传递

  • 考虑: 为什么改变的值会改变的值?

  • 我最近通过Homebrew在我的Mac上安装了Apache 2.4。(我以前使用苹果提供的Apache。) 在PHP脚本中,我对位于/usr/local/bin中的可执行文件调用Exec(x),但它失败了,因为/usr/local/bin未包含在Apache的PATH环境变量中。运行phpinfo()显示路径为/usr/bin:/bin:/usr/sbin:/sbin。 我以前在/System/L

  • 从"text/html"到"Application/json"的响应的标头类型。其他然后这个 am使用as头类型作为头(“内容类型”、“应用程序/json;字符集=UTF-8”) 但不是改变。