我做了一个按钮修饰符,背景颜色应该根据它是否被点击而改变。但我抱怨 viewModifier 的输入参数是不可变的。
我在btnBkColor上遇到错误
.modifier(ActionButtonType(bkColor: btnBkColor))
错误消息:
不能对不可变值使用变异 getter:'self' 是不可变的
这是我的简化代码:
struct MyView: View {
@State private var cond = false
private lazy var btnBkColor: Color = cond ? Color.orange : Color.green
var body: some View {
Button(action: { cond.toggle() }, label: {
Text(cond ? "A" : "B")
})
.modifier(ActionButtonType(bkColor: btnBkColor))
}
}
修饰符:
struct ActionButtonType: ViewModifier {
let bkColor: Color
func body(content: Content) -> some View {
content
.background(bkColor)
}
}
我只在 ViewModifier 中获取但没有设置 btnBkColor,我不明白为什么输入参数不能是不可变的?
我尝试过但没有帮助的方法:
- 将 let 更改为 var
- 在 btnBkColor 前面添加 @State
非常感谢您提前。