更新到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
Variable 'attributes' was never mutated, consider changing to 'let' constant
为什么xcode说呢Variable 'attributes' was never mutated?
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
但是编译器无法做到这一点,除非您 尽let一切可能使用。它不会 为 您var将a 更改为a 。let __
因此,在Swift 2中,编译器会在构建时进行更智能的分析,并警告您是否使用了本var该使用的位置let。最终,此功能将正常运行,这时您应该接受编译器的建议!