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