如何:使用条件自定义背景视图作为背景修饰符?
How to: Use conditional custom background views for background modifier?
通常,如何在修饰符中使用三元运算符进行条件更改是很直接的。但是,当我尝试在背景修饰符的两个自定义视图之间切换时,出现此错误。如果您例如,情况并非如此。直接指定颜色作为备用视图。
错误:'? 中的结果值:' 表达式有不匹配的类型 'BackgroundView1' 和 'BackgroundView2'
import SwiftUI
struct TestView: View {
@State var buttonPressed = false
var body: some View {
Button(action: {self.buttonPressed.toggle()}) {
Image(systemName: "circle.fill")
.background(self.buttonPressed ? BackgroundView1() : BackgroundView2()) // Error
// .background(buttonPressed ? Color.red : Color.green)
}
}
}
struct BackgroundView1: View {
var body: some View {
Color.red
}
}
struct BackgroundView2: View {
var body: some View {
Color.green
}
}
struct TestView_Previews: PreviewProvider {
static var previews: some View {
TestView()
}
}
视图必须是一种类型,这是可能的解决方案
Image(systemName: "circle.fill")
.background(Group {
if self.buttonPressed { BackgroundView1() }
else { BackgroundView2() }
})
或者,如果视图很简单(否则可能是性能问题),
Image(systemName: "circle.fill")
.background(self.buttonPressed ? AnyView(BackgroundView1()) : AnyView(BackgroundView2()))
通常,如何在修饰符中使用三元运算符进行条件更改是很直接的。但是,当我尝试在背景修饰符的两个自定义视图之间切换时,出现此错误。如果您例如,情况并非如此。直接指定颜色作为备用视图。
错误:'? 中的结果值:' 表达式有不匹配的类型 'BackgroundView1' 和 'BackgroundView2'
import SwiftUI
struct TestView: View {
@State var buttonPressed = false
var body: some View {
Button(action: {self.buttonPressed.toggle()}) {
Image(systemName: "circle.fill")
.background(self.buttonPressed ? BackgroundView1() : BackgroundView2()) // Error
// .background(buttonPressed ? Color.red : Color.green)
}
}
}
struct BackgroundView1: View {
var body: some View {
Color.red
}
}
struct BackgroundView2: View {
var body: some View {
Color.green
}
}
struct TestView_Previews: PreviewProvider {
static var previews: some View {
TestView()
}
}
视图必须是一种类型,这是可能的解决方案
Image(systemName: "circle.fill")
.background(Group {
if self.buttonPressed { BackgroundView1() }
else { BackgroundView2() }
})
或者,如果视图很简单(否则可能是性能问题),
Image(systemName: "circle.fill")
.background(self.buttonPressed ? AnyView(BackgroundView1()) : AnyView(BackgroundView2()))