编译器无法在SwiftUI中的合理时间内对此表达式进行类型检查

编译器无法在SwiftUI中的合理时间内对此表达式进行类型检查,swift,swiftui,Swift,Swiftui,我试图在SwiftUI中构建一个我认为是简单的表单,但是在从主体返回的视图上(在本例中是表单,但我也尝试了VStack)出现错误“编译器无法键入检查此表达式;尝试将表达式分解为不同的子节”。如果我开始删除一些子视图,它似乎可以解决问题,即使没有一个视图直接返回10个子视图,我认为这是单个视图的限制(ForEach中返回的视图除外) 导入快捷界面 结构CreateDispatchView:视图{ @国家私有变量customerId:Int=0 @国家私有变量名称:String=“” @国家私人电话

我试图在SwiftUI中构建一个我认为是简单的表单,但是在从主体返回的视图上(在本例中是表单,但我也尝试了VStack)出现错误“编译器无法键入检查此表达式;尝试将表达式分解为不同的子节”。如果我开始删除一些子视图,它似乎可以解决问题,即使没有一个视图直接返回10个子视图,我认为这是单个视图的限制(ForEach中返回的视图除外)

导入快捷界面
结构CreateDispatchView:视图{
@国家私有变量customerId:Int=0
@国家私有变量名称:String=“”
@国家私人电话:String=“”
@国家私有变量说明:String=“”
@国家私有变量优先级ID:Int=0
@状态私有变量callTypeId:Int=0
@国家私有变量间隔:String=“”
@国家私有变量poTicket:String=“”
@国家私有var outOfChemicals:Bool=false
@状态私有变量isReturnCall:Bool=false
var body:一些观点{

Form{//处理大型嵌套的
ViewBuilder
表达式是当前swift编译器的一个弱点。不过,一般来说,它建议“尝试将表达式分解为不同的子节”这是一个很好的方法:将这些单一的
ViewBuilder
表达式重构为单独的动态变量是提高性能的一个好方法(另外还有助于隔离实际错误)

下面是一个如何重构代码以成功编译的示例:

struct CreateDispatchView:视图{
@国家私有变量customerId:Int=0
@国家私有变量名称:String=“”
@国家私人电话:String=“”
@国家私有变量说明:String=“”
@国家私有变量优先级ID:Int=0
@状态私有变量callTypeId:Int=0
@国家私有变量间隔:String=“”
@国家私有变量poTicket:String=“”
@国家私有var outOfChemicals:Bool=false
@状态私有变量isReturnCall:Bool=false
var body:一些观点{
形式{
客户部门
优先股
信息部分
}
}
私有var customerSection:一些视图{
部分{
选择器(“客户”,选择:$customerId){
ForEach(0..<10){
文本(“客户\($0)”)
}
}
TextField(“名称”,text:$Name)
文本字段(“电话”,文本:$Phone)
TextField(“说明”,text:$Description)
文本字段(“间隔”,文本:$Bay)
TextField(“PO票证”,文本:$poTicket)
}
}
private var prioritySection:一些视图{
部分{
选择器(“优先级”,选择:$priorityId){
ForEach(0..<2){
文本(“优先级\($0)”)
}
}
选择器(“调用类型”,选择:$callTypeId){
ForEach(0..<3){
文本(“呼叫类型\($0)”)
}
}
}
}
私有var信息部分:一些视图{
部分{
切换(isOn:$outOfChemicals){
文本(“化学品用完”)
}
切换(isOn:$isReturnCall){
文本(“是回电”)
}
}
}
}

您是否尝试过Xcode 11.2 beta 2?据说可以解决此类问题。此外,Xcode 11.2 beta正在努力改进编译器。从发行说明中可以看出:Swift function builders使用了一种新的类型检查算法,该算法提高了编译时间,并消除了许多“无法在合理的时间内对表达式进行类型检查”的情况对于那些在其他编译器和环境中工作过的开发人员来说,Xcode非常糟糕,即使经过多年的开发,也没有变得更好。
import SwiftUI

struct CreateDispatchView: View {
    @State private var customerId: Int = 0
    @State private var name: String = ""
    @State private var phone: String = ""
    @State private var description: String = ""
    @State private var priorityId: Int = 0
    @State private var callTypeId: Int = 0
    @State private var bay: String = ""
    @State private var poTicket: String = ""
    @State private var outOfChemicals: Bool = false
    @State private var isReturnCall: Bool = false

    var body: some View {
        Form { // <-- Error is shown here
            Section {
                Picker("Customer", selection: $customerId) {
                    ForEach(0 ..< 10) {
                        Text("Customer \($0)")
                    }
                }
                TextField("Name", text: $name)
                TextField("Phone", text: $phone)
                TextField("Description", text: $description)
                TextField("Bay", text: $bay)
                TextField("PO ticket", text: $poTicket)
            }

            Section {

                Picker("Priority", selection: $priorityId) {
                    ForEach(0 ..< 2) {
                        Text("Priority \($0)")
                    }
                }
                Picker("Call type", selection: $callTypeId) {
                    ForEach(0 ..< 3) {
                        Text("Call type \($0)")
                    }
                }
            }

            Section {

                Toggle(isOn: $outOfChemicals) {
                    Text("Out of chemicals")
                }
                Toggle(isOn: $isReturnCall) {
                    Text("Is return call")
                }
            }
        }
    }
}

struct CreateDispatchView_Previews: PreviewProvider {
    static var previews: some View {
        CreateDispatchView()
    }
}