Файл 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
})
}
}
}
}
}
}
}