swift 在一个懒惰的getter函数上避免“$0'是不可变的”?

oiopk7p5  于 2023-04-19  发布在  Swift
关注(0)|答案(1)|浏览(107)

我在我的结构中有一个名为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) })

但是错误是“Cannot use mutating getter on immutable value:'$0'是不可变的”。但是我如何使用getter函数,它被定义为懒惰的,所以它会改变它的值?

vngu2lb8

vngu2lb81#

这个问题不是关于结构或惰性定义。在files.filter({ $0.labelColors.isColorSet(color: TagColors.red) }),迭代结构中,你有一个let变量($0在这里是一个let),let常量不能被修改,所以你会得到这个错误消息。要修复这个问题,请使用:

let redFilesOnly = files.filter({ val in
     var new = val
     return new.labelColors.isColorSet(color: TagColors.red) 

})

相关问题