不使用AnyView的SwiftUI切换功能

mic*_*cah 0 swiftui

我了解到我不应该AnyView()在 SwiftUI 中使用。我已经编写了许多带有 switch 语句的函数来返回相应的视图,如下面的代码所示。我正在尝试学习将 switch 语句从AnyView()

struct T01: View{
    var body: some View{
        VStack{
            showView(i: 1)
        }
    }
    
    func showView(i: Int) -> some View{
        switch(i){
            case 0: return AnyView(viewOne)
            case 1: return AnyView(viewTwo)
            default: return AnyView(EmptyView())
        }
    }
    
    var viewOne: some View {
        Text("View One")
    }
    
    var viewTwo: some View {
        Text("View Two")
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!!!

Ash*_*lls 5

您的showView函数每次都必须返回相同类型的视图,这就是AnyView有效的原因。

您有几个选项可以解决此问题:

将所有内容包裹在另一个中View,例如Group

func showView(i: Int) -> some View {
    Group {
        switch  i {
        case 0:
            viewOne
        case 1:
            viewTwo
        default:
            EmptyView()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

@ViewBuilder用属性标记函数

@ViewBuilder
func showView(i: Int) -> some View {
    switch  i {
    case 0:
        viewOne
    case 1:
        viewTwo
    default:
        EmptyView()
    }
}
Run Code Online (Sandbox Code Playgroud)