我有2种自定义按钮样式,我想在点击按钮时更改样式。我尝试过这种方式:
Button(action: {
self.pressed.toggle()
})
{
Text("Button")
}.buttonStyle(pressed ? style1() : style2())
但是它不起作用,它给我它所属的VStack一个错误:
Unable to infer complex closure return type; add explicit type to disambiguate
如果我做类似的事情:
.buttonStyle(style1())
或
.buttonStyle(style2())
然后错误消失了,所以它不是来自style1()或style2()。
您可以创建如下所示的有用扩展程序
extension View {
func conditionalModifier<M1: ViewModifier, M2: ViewModifier>
(on condition: Bool, trueCase: M1, falseCase: M2) -> some View {
Group {
if condition {
self.modifier(trueCase)
} else {
self.modifier(falseCase)
}
}
}
func conditionalModifier<M: ViewModifier>
(on condition: Bool, trueCase: M) -> some View {
Group {
if condition {
self.modifier(trueCase)
}
}
}
}
用法;
@State var condition = false
var body: some View {
Text("conditional modifier")
.conditionalModifier(on: condition, trueCase: Style1())
.conditionalModifier(on: condition, trueCase: Style1(), falseCase: Style2())
}