ade*_*ris 5 background view modifier conditional-statements swiftui
通常,如何使用三元运算符对修饰符进行条件更改是很简单的。但是当我尝试在背景修改器的两个自定义视图之间切换时,我收到此错误。如果您直接指定颜色作为替代视图,则情况并非如此。
错误:结果值在 '? :' 表达式的类型 '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()
}
}
Run Code Online (Sandbox Code Playgroud)
视图必须是一种类型,这是可能的解决方案
Image(systemName: "circle.fill")
.background(Group {
if self.buttonPressed { BackgroundView1() }
else { BackgroundView2() }
})
Run Code Online (Sandbox Code Playgroud)
另一种方法是,如果视图很简单(否则可能是性能问题),
Image(systemName: "circle.fill")
.background(self.buttonPressed ? AnyView(BackgroundView1()) : AnyView(BackgroundView2()))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2507 次 |
| 最近记录: |