SwiftUI中的ContentView文件对于编译器来说太复杂了吗?

时间:2020-10-26 23:49:53

标签: swift swiftui xcode12 viewbuilder

自从SwiftUI 2发布以来,编译器和调试器就变得非常糟糕。每当我在'viewThatCanContainOtherViews()'中向ZStack添加另一个视图(这是一个自定义结构,甚至只是一个包含Text()元素的VStack)时,代码都会拒绝编译。每个通常还包含一些堆栈或按钮或其他内容。我觉得ViewBuilder太复杂了,但是我不明白这是否不是您的工作方式,其他应用程序又是如何做到的?该代码只是无法编译,并且我确定它不是某个语法错误,因为它会编译(尽管速度非常慢),除非我添加另一个视图,否则我会收到错误。

通用的代码格式如下所示:

struct ContentView: View {
var body: some View {
    GeometryReader { proxy in
        ZStack{
            VStack {
                if bool1{
                    if bool2 {
                        view1()
                    } else if bool3 {
                        view1() //different initialization
                    }
                } else {
                    VStack {
                        Spacer()
                        HStack {
                            Spacer()
                            if bool4 {
                                view2()
                            } else if bool5 {
                                view2() // different initialization
                            }
                            Spacer()
                        }
                        Spacer()
                    }
                }
            }.onAppear {
                //code that is run on appear
            }
            .onReceive(variable) { input in
                //code that is run sometimes
            }
            VStack{
                HStack{
                    Spacer()
                    VStack {
                        if bool6 {
                            if bool7 {
                                view3()
                            } else if bool8 {
                                view3() //different initialization
                            }
                        } else {
                            if bool9 {
                                view4()
                            } else if bool10 {
                                view4() //different initialization
                            }
                        }
                    }
                }
                Spacer()
            }
            if bool11 {
                VStack {
                    Spacer()
                    HStack {
                        Spacer()
                        view5()
                        Spacer()
                    }
                    Spacer()
                }
            }
            VStack {
                Spacer()
                HStack{
                    Spacer()
                    if bool12 {
                        if bool13 {
                            view6()
                            //Instead of passing in searchedText, we need to pass in the mapView...idk how though
                        } else if bool14 {
                            view6() //different initialization
                        }
                    }
                    Spacer()
                }
                Spacer()
            }
            Group {
                VStack {
                    if bool15 {
                        viewThatCanContainOtherViews() {
                            ZStack {
                                //If I add views here it doesn't compile
                                Group {
                                    if bool15 {
                                        VStack {
                                            view7()
                                        }
                                    }
                                    if bool16 {
                                        view8()
                                    }
                                }
                                Group {
                                    VStack {
                                        if bool17 {
                                            view9()
                                        }
                                        if bool18 {
                                            view10()
                                            view11()
                                        }
                                        Spacer()
                                    }
                                }
                                Group {
                                    VStack {
                                        if bool19 {
                                            view12()
                                        }
                                        Spacer()
                                    }
                                }
                            }
                        }
                    }
                    else if bool20 {
                        viewThatCanContainOtherViews {
                            ZStack {
                                Group {
                                    if bool21 {
                                        VStack {
                                            view7()
                                        }
                                    }
                                    if bool22 {
                                        view8()
                                    }
                                }
                                Group {
                                    VStack {
                                        if bool23 {
                                            view9()
                                        }
                                        
                                        if bool24 {
                                            view10()
                                            view11()
                                        }
                                        Spacer()
                                    }
                                }
                                Group {
                                    VStack {
                                        if bool25 {
                                            view12()
                                        }
                                        Spacer()
                                    }
                                }
                            }
                        }
                    }
                }
            }
            if bool26 {
                if bool27 {
                    view13()
                } else if bool28 {
                    view13() //different initialization
                }
            }
            Group {
                if bool28 {
                    if bool29 {
                        view14()
                            .onDisappear(perform: { //do stuff
                            })
                    } else if bool30 {
                        view14() // different initializer
                            .onDisappear(perform: { //do stuff
                            })
                    }
                }
                if bool31 {
                    if bool32 {
                        view15()
                            .onDisappear(perform: { //do stuff
                            })
                    } else if bool33 {
                        view15()
                            .onDisappear(perform: { //do stuff
                            })
                    }
                }
            }
            
        }
    }
}
}

0 个答案:

没有答案
相关问题