如何:使用条件自定义背景视图作为背景修改器?

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)

Asp*_*eri 8

视图必须是一种类型,这是可能的解决方案

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)