在惰性 getter 函数中避免“$0' 是不可变的”?

问题描述 投票:0回答:2

我的结构中有一个名为 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 函数,所以它会改变它的值?

swift filter lazy-evaluation mutable
2个回答
0
投票

一个解决方案是在过滤时使用可变副本

let redFilesOnly = files.filter({ 
    var item = $0
    return item.labelColors.isColorSet(color: TagColors.red) 
})

0
投票

问题不在于结构或惰性定义。在那行

 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) 

})
© www.soinside.com 2019 - 2024. All rights reserved.