0

自从 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
                            })
                    }
                }
            }
            
        }
    }
}
}
4

0 回答 0