一尘不染

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

swift

更新到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
}

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


阅读 350

收藏
2020-07-07

共1个答案

一尘不染

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

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

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

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

2020-07-07