Файл ContentView в SwiftUI слишком сложен для компилятора?

С момента выхода SwiftUI 2 компилятор и отладчик стали просто ужасными. Каждый раз, когда я добавляю другое представление (это настраиваемая структура или даже просто VStack, содержащий элемент Text()) в ZStack в 'viewThatCanContainOtherViews()', код отказывается компилироваться. Каждый обычно также содержит несколько стеков, кнопок или чего-то еще. Мне кажется, 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 ответов

Другие вопросы по тегам