如何解决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 举报,一经查实,本站将立刻删除。