【发布时间】:2021-02-22 09:17:17
【问题描述】:
我做了一个按钮修饰符,背景颜色应该根据它是否被点击而改变。但我抱怨 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,没有设置btnBkColor,不明白为什么输入参数不能不可变?
我尝试过但无济于事:
- 将 let 更改为 var
- 在 btnBkColor 前面添加@State
非常感谢您。
【问题讨论】:
标签: swift swiftui viewmodifier