我的结构中有一个名为 labelColors 的惰性变量:
lazy var _labelColors: LabelType = { return url.getTagColors() }()
var labelColors : LabelType {
mutating get { return _labelColors }
set { _labelColors = newValue }
}
只有在第一次真正需要的时候才调用它的值。 在我的大阵列上使用过滤器时,我有
let redFilesOnly = files.filter({ $0.labelColors.isColorSet(color: TagColors.red) })
但是错误是“不能在不可变值上使用可变吸气剂:‘$0’是不可变的”。但是我如何使用定义为惰性的 getter 函数,所以它会改变它的值?
一个解决方案是在过滤时使用可变副本
let redFilesOnly = files.filter({
var item = $0
return item.labelColors.isColorSet(color: TagColors.red)
})
问题不在于结构或惰性定义。在那行
files.filter({ $0.labelColors.isColorSet(color: TagColors.red) })
中,使用结构进行迭代,你有一个 let
变量($0
在这里是一个 let )并且 let constant cannot be modified as you know ,所以你收到这个错误消息。要修复该用途:
let redFilesOnly = files.filter({ val in
var new = val
return new.labelColors.isColorSet(color: TagColors.red)
})