微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。