Swiftui 编译器无法在合理的时间内对此表达式进行类型检查,但我的视图不是太大

Swiftui 编译器无法在合理的时间内对此表达式进行类型检查,但我的视图不是太大,swiftui,Swiftui,下面的文件每次都失败,它甚至不让我看到视图的预览。我知道发生了什么事。我已经退出Xcode,我已经清理了构建文件夹。我能想到的一切,我都做了。我正在使用Xcode版本12.2。有人有什么想法吗 struct weatherToggle : Identifiable { let id = UUID() var value : Bool = false } struct Sliders : Identifiable { var id: UUID var perce

下面的文件每次都失败,它甚至不让我看到视图的预览。我知道发生了什么事。我已经退出Xcode,我已经清理了构建文件夹。我能想到的一切,我都做了。我正在使用Xcode版本12.2。有人有什么想法吗

struct weatherToggle : Identifiable {
    let id = UUID()
    var value : Bool = false
}


struct Sliders : Identifiable {
    var id: UUID
    var percent: Double
    var name: String
    
    init( percent: Double, name: String ) {
        self.id = UUID()
        self.percent = percent
        self.name = name
        
    }
}

struct MyNodeView : View {
    @Binding var myNode : Sliders
    var body: some View {
        HStack {
            Text("\(String(format: "%.f", myNode.percent))%").font(.footnote)
            Slider(value: $myNode.percent, in: 0 ... 100).padding()
        }
    }
    
}

struct OperatingConditionsView: View {
    @State var selection: Int? = nil
    let lightGray = Color(hue: 1.0, saturation: 0.0, brightness: 0.392)
    @Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
    
     
    @State private var defensiveLayers = [Sliders]()
    @State var sensorsAndSupports = [Sliders]()

//    @Binding public var threats: [Any]
    @State var availableLaunchPlatformSelections: [String] = []
    
    @State var items = [weatherToggle(),
                        weatherToggle(),
                        weatherToggle()]
    
    @State public var battery = "South Korea"
    
    @State var atmosphericsSeverity = [String]()
    @State var heliosphericsSeverity = [String]()

    var conditions = ["light", "moderate", "severe"]
    @State var heliospherics = [String]()
    @State var atmospherics = [String]()
    //@State var defensiveLayers = [String]()
    @State var availableLaunchPlatforms = [String]()
    //@State var sensorsAndSupport = [String]()
    
    var body: some View {
        ScrollView {
            VStack(alignment: .leading) {
                Text("OPERATING CONDITIONS").fontWeight(.bold)
                    .foregroundColor(Color(hue: 0.651, saturation: 1.0, brightness: 0.465))
                    .multilineTextAlignment(.center).padding(.vertical).frame(maxWidth: .infinity)
                Button("load stored attack parameter set"){
                    
                }.padding(.leading, 30)
                Text("ASSET READINESS").fontWeight(.bold).font(.subheadline)
                    .foregroundColor(Color(hue: 0.651, saturation: 1.0, brightness: 0.465))
                    .multilineTextAlignment(.center).padding(.vertical).frame(maxWidth: .infinity)
                Group {
                    Text("Available launch platforms").fontWeight(.bold).foregroundColor(lightGray).padding(.vertical).padding(.leading, 30).font(.system(size: 15))
                    VStack {
                        List {
                            ForEach(availableLaunchPlatforms, id: \.self) { launchPlatform in
                                MultipleSelectionRow(title: launchPlatform, isSelected: self.availableLaunchPlatformSelections.contains(launchPlatform)) {
                                    if self.availableLaunchPlatformSelections.contains(launchPlatform) {
                                        self.availableLaunchPlatformSelections.removeAll(where: { $0 == launchPlatform })
                                    }
                                    else {
                                        self.availableLaunchPlatformSelections.append(launchPlatform)
                                    }
                                }.font(.custom("Gill Sans", size: 12)).foregroundColor(.gray)
                            }
                        }.frame(height: 250).font(.footnote)
                    }
                }
                Group {
                    Text("Other defensive layers").fontWeight(.bold).foregroundColor(lightGray).padding(.vertical).padding(.leading, 30).font(.system(size: 15))
                    HStack {
                        VStack {
                            ForEach(defensiveLayers.indices, id: \.self) { i in
                                Text(defensiveLayers[i].name).font(.custom("Gill Sans", size: 12)).padding(.trailing).foregroundColor(.gray).frame(maxHeight: .infinity)
                            }
                        }
                        VStack {
                            ForEach(defensiveLayers.indices, id: \.self) { i in
                                MyNodeView(myNode: $defensiveLayers[i])
                            }
                        }
                    }.padding(.horizontal, 30)
                }
                Group {
                    Text("Sensors & Support").fontWeight(.bold).foregroundColor(lightGray).padding(.vertical).padding(.leading, 30).font(.system(size: 15))
                    HStack {
                        VStack {
                            ForEach(sensorsAndSupports.indices, id: \.self) { i in
                                Text(sensorsAndSupports[i].name).font(.custom("Gill Sans", size: 12)).padding(.trailing).foregroundColor(.gray).frame(maxHeight: .infinity)
                            }
                        }
                        VStack {
                            ForEach(sensorsAndSupports.indices, id: \.self) { i in
                                MyNodeView(myNode: $sensorsAndSupports[i])
                            }
                        }
                    }.padding(.horizontal, 30)
                }
                Group {
                    Text("ATMOSPHERICS").fontWeight(.bold).font(.subheadline)
                        .foregroundColor(Color(hue: 0.651, saturation: 1.0, brightness: 0.465))
                        .multilineTextAlignment(.center).padding(.vertical).frame(maxWidth: .infinity)
                    
                    ForEach(0 ..< atmospherics.count, id: \.self) { i in
                        HStack {
                            Menu {
                                ForEach(0 ..< conditions.count) { j in
                                    Button(conditions[j]) {
                                        atmosphericsSeverity[i] = conditions[j]
                                    }
                                }
                            } label: {
                                Text(atmospherics[i])
                                Image(systemName: "cloud.drizzle")
                           }.frame(maxWidth: .infinity)
                            Text("Current: " + atmosphericsSeverity[i]).frame(maxWidth: .infinity).font(.footnote).foregroundColor(.gray)
                        }.padding()
                        .foregroundColor(.white).background(LinearGradient(gradient: Gradient(colors: [Color.black, Color.blue]), startPoint: .leading, endPoint: .trailing))
                        .cornerRadius(10)
                        .padding()
                    }
                }
                Group {
                    Text("HELIOSPHERICS").fontWeight(.bold).font(.subheadline)
                        .foregroundColor(Color(hue: 0.651, saturation: 1.0, brightness: 0.465))
                        .multilineTextAlignment(.center).padding(.vertical).frame(maxWidth: .infinity)
                    ForEach(0 ..< heliospherics.count, id: \.self) { i in
                        HStack {
                            Menu {
                                ForEach(0 ..< conditions.count) { j in
                                    Button(conditions[j]) {
                                        heliosphericsSeverity[i] = conditions[j]
                                    }
                                }
                            } label: {
                                Text(heliospherics[i])
                                Image(systemName: "cloud.drizzle")
                           }.frame(maxWidth: .infinity)
                            Text("Current: " + heliosphericsSeverity[i]).frame(maxWidth: .infinity).font(.footnote).foregroundColor(.gray)
                        }.padding()
                        .foregroundColor(.white).background(LinearGradient(gradient: Gradient(colors: [Color.black, Color.blue]), startPoint: .leading, endPoint: .trailing))
                        .cornerRadius(10)
                        .padding()
                    }
                }
                HStack {
                    Button("Cancel") {
                        self.presentationMode.wrappedValue.dismiss()
                    }.frame(maxWidth: .infinity)
                    Button("Run"){
                        let jsonObj: Any = ["Threats": [], "launchPlatforms": availableLaunchPlatformSelections, "defensiveLayers": defensiveLayers.map({ ["layer": $0.name, "percentage": Int($0.percent) ] }), "sensorsAndSupports": sensorsAndSupports.map({ ["SensorSupport": $0.name, "percentage": Int($0.percent) ] }), "atmospherics:": atmosphericsSeverity.map({ ["weather": "", "intensity": $0 ] })]
                        print(convertJSON(array: jsonObj))
                    }.foregroundColor(.red).frame(maxWidth: .infinity)
                }.frame(maxWidth: .infinity).padding(.all, 30)
                
            }
        }.onAppear() {
            loadOpConditions(country: battery.replacingOccurrences(of: " ", with: ""), completionHandler: { (data: [Dictionary<String, Any>]) in

                for row in data {
                    for _ in row["atmosperics"] as! [String]
                    {
                        atmosphericsSeverity.append("light")
                    }
                    for i in row["heliospherics"] as! [String]
                    {
                        heliosphericsSeverity.append("light")
                    }
                    heliospherics = row["heliospherics"] as! [String]
                    atmospherics = row["atmosperics"] as! [String]
                    for i in row["sensorsAndSupport"] as! [String]
                    {
                        sensorsAndSupports.append(Sliders(percent: 0, name: i))
                    }
                    for i in row["defensiveLayers"] as! [String]
                    {
                        defensiveLayers.append(Sliders(percent: 0, name: i ))
                        
                    }
                    availableLaunchPlatforms = row["availableLaunchPlatforms"] as! [String]
                }

            })
        }
    }
    
    func convertJSON(array: Any) -> String
    {
        do {
            let jsonData = try JSONSerialization.data(withJSONObject: array, options: [])
            if let jsonString = String(data: jsonData, encoding: String.Encoding.utf8) {
                //print(jsonString)
                return jsonString
            }
            else
            {
                return ""
            }
        } catch {
            return "error"
        }
    }
    
    
    func loadOpConditions(country: String, completionHandler: @escaping ([Dictionary<String, Any>]) -> Void) -> Void {
        
        var request = URLRequest(url: URL(string: "https://salusdatalab.com/api/OperatingConditions/" + country)!,timeoutInterval: Double.infinity)
        request.httpMethod = "GET"
        //        request.addValue("Bearer \(LoginViewController.myToken.bearerToken)", forHTTPHeaderField: "Authorization")
        
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            guard let data = data
            else {
                //p rint(String(describing: error))
                return
            }
            //p rint(String(data: data, encoding: .utf8)!)
            guard let json = try? JSONSerialization.jsonObject(with: data, options: .mutableContainers)
            else { return }
            guard let rootArray = json as? Array<Dictionary<String,Any>>
            else { return }
            
            // The outer/root array seems useless from what you have shown in your JSON above, so this is to get to the array of dictionaries.
            
            completionHandler(rootArray)
            
        }
        
        task.resume()
        
    }
}

struct OperatingConditionsView_Previews: PreviewProvider {
    static var previews: some View {
        OperatingConditionsView()
    }
}
struct weatherToggle:可识别{
设id=UUID()
变量值:Bool=false
}
结构滑块:可识别{
变量id:UUID
风险百分比:双
变量名称:String
初始化(百分比:双精度,名称:字符串){
self.id=UUID()
self.percent=百分比
self.name=名称
}
}
结构MyNodeView:视图{
@绑定var myNode:滑块
var body:一些观点{
HStack{
文本(\(字符串(格式:%.f',myNode.percent))%”。字体(.footnote)
滑块(值:$myNode.percent,单位:0…100)
}
}
}
结构操作条件视图:视图{
@状态变量选择:Int?=nil
让lightGray=颜色(色调:1.0,饱和度:0.0,亮度:0.392)
@环境(\.presentationMode)变量presentationMode:绑定
@国家私有var DefensiveElayers=[滑块]()
@状态变量sensorsAndSupports=[滑块]()
//@Binding public-var-threats:[任何]
@状态变量AvailableLanchPlatformSelections:[字符串]=[]
@状态变量项=[weatherToggle(),
weatherToggle(),
weatherToggle()]
@国家公共var电池=“韩国”
@状态变量atmosphericsSeverity=[String]()
@状态变量HelioSphereicsSeverity=[String]()
风险值条件=[“轻度”、“中度”、“重度”]
@状态变量HelioSphereics=[String]()
@状态变量atmospherics=[String]()
//@状态变量DefensiveElayers=[String]()
@状态变量AvailableLanchPlatform=[String]()
//@状态变量sensorsAndSupport=[String]()
var body:一些观点{
滚动视图{
VStack(对齐:。前导){
文本(“操作条件”).fontWeight(.bold)
.foregroundColor(颜色(色调:0.651,饱和度:1.0,亮度:0.465))
.multilineTextAlignment(.center).padding(.vertical).frame(最大宽度:。无穷大)
按钮(“加载存储的攻击参数集”){
}.padding(.leading,30)
文本(“资产准备就绪”).fontWeight(.bold).font(.subheadline)
.foregroundColor(颜色(色调:0.651,饱和度:1.0,亮度:0.465))
.multilineTextAlignment(.center).padding(.vertical).frame(最大宽度:。无穷大)
团体{
文本(“可用的启动平台”).fontWeight(.bold).foregroundColor(浅灰色).填充(.vertical).填充(.leading,30).字体(.system(大小:15))
VStack{
名单{
ForEach(AvailableLanchPlatform,id:\.self){launchPlatform in
MultipleSelectionRow(标题:launchPlatform,isSelected:self.availableLaunchPlatformSelections.contains(launchPlatform)){
如果self.availableLaunchPlatformSelections.contains(启动平台){
self.availableLaunchPlatformSelections.removeAll(其中:{$0==launchPlatform})
}
否则{
self.availableLaunchPlatformSelections.append(启动平台)
}
}.font(.custom(“Gill Sans”,大小:12)).foregroundColor(.gray)
}
}.frame(高度:250).font(.footnote)
}
}
团体{
文本(“其他防御层”).fontWeight(.bold).foregroundColor(浅灰色).填充(.vertical).填充(.leading,30).字体(.system(大小:15))
HStack{
VStack{
ForEach(defensiveelayers.index,id:\.self){i in
文本(DefensiveElayers[i].name).font(.custom(“Gill Sans”,大小:12)).padding(.training).foregroundColor(.gray).frame(最大高度:.infinity)
}
}
VStack{
ForEach(defensiveelayers.index,id:\.self){i in
MyNodeView(myNode:$DefensiveElayers[i])
}
}
}.padding(.卧式,30)
}
团体{
文本(“传感器和支持”).fontWeight(.bold).foregroundColor(浅灰色).填充(.vertical).填充(.leading,30).字体(.system(大小:15))
HStack{
VStack{
ForEach(sensorsAndSupports.index,id:\.self){i in
Text(sensorsAndSupports[i].name).font(.custom(“Gill Sans”,大小:12)).padding(.training).foregroundColor(.gray).frame(maxHeight:.infinity)
}
}
VStack{
ForEach(sensorsAndSupports.index,id:\.self){i in
MyNodeView(myNode:$sensorsAndSupports[i])
}
}
}.padding(.卧式,30)
}
团体{
文本(“大气”).fontWeight(.bold).font(.subheadline)
.foregroundColor(颜色(色调:0.651,饱和度:1.0,亮度:0.465))
.multilineTextAlignment(.center).padding(.vertical).frame(最大宽度:。无穷大)
ForEach(0..<大气c
struct OperatingConditionsView: View {
    @State var selection: Int? = nil
    let lightGray = Color(hue: 1.0, saturation: 0.0, brightness: 0.392)
    @Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
    
     
    @State private var defensiveLayers = [Sliders]()
    @State var sensorsAndSupports = [Sliders]()

//    @Binding public var threats: [Any]
    @State var availableLaunchPlatformSelections: [String] = []
    
    @State var items = [weatherToggle(),
                        weatherToggle(),
                        weatherToggle()]
    
    @State public var battery = "South Korea"
    
    @State var atmosphericsSeverity = [String]()
    @State var heliosphericsSeverity = [String]()

    var conditions = ["light", "moderate", "severe"]
    @State var heliospherics = [String]()
    @State var atmospherics = [String]()
    //@State var defensiveLayers = [String]()
    @State var availableLaunchPlatforms = [String]()
    //@State var sensorsAndSupport = [String]()
    
    var topSection: some View {
        Group {
            Text("OPERATING CONDITIONS").fontWeight(.bold)
                .foregroundColor(Color(hue: 0.651, saturation: 1.0, brightness: 0.465))
                .multilineTextAlignment(.center).padding(.vertical).frame(maxWidth: .infinity)
            Button("load stored attack parameter set"){
                
            }.padding(.leading, 30)
            Text("ASSET READINESS").fontWeight(.bold).font(.subheadline)
                .foregroundColor(Color(hue: 0.651, saturation: 1.0, brightness: 0.465))
                .multilineTextAlignment(.center).padding(.vertical).frame(maxWidth: .infinity)
        }
    }
    
    var firstGroup : some View {
        Group {
            Text("Available launch platforms").fontWeight(.bold).foregroundColor(lightGray).padding(.vertical).padding(.leading, 30).font(.system(size: 15))
            VStack {
                List {
                    ForEach(availableLaunchPlatforms, id: \.self) { launchPlatform in
//                                MultipleSelectionRow(title: launchPlatform, isSelected: self.availableLaunchPlatformSelections.contains(launchPlatform)) {
//                                    if self.availableLaunchPlatformSelections.contains(launchPlatform) {
//                                        self.availableLaunchPlatformSelections.removeAll(where: { $0 == launchPlatform })
//                                    }
//                                    else {
//                                        self.availableLaunchPlatformSelections.append(launchPlatform)
//                                    }
//                                }.font(.custom("Gill Sans", size: 12)).foregroundColor(.gray)
                    }
                }.frame(height: 250).font(.footnote)
            }
        }
    }
//
    var secondGroup : some View {
        Group {
            Text("Other defensive layers").fontWeight(.bold).foregroundColor(lightGray).padding(.vertical).padding(.leading, 30).font(.system(size: 15))
            HStack {
                VStack {
                    ForEach(defensiveLayers.indices, id: \.self) { i in
                        Text(defensiveLayers[i].name).font(.custom("Gill Sans", size: 12)).padding(.trailing).foregroundColor(.gray).frame(maxHeight: .infinity)
                    }
                }
                VStack {
                    ForEach(defensiveLayers.indices, id: \.self) { i in
                        MyNodeView(myNode: $defensiveLayers[i])
                    }
                }
            }.padding(.horizontal, 30)
        }
    }
//
    var thirdGroup : some View {
        Group {
            Text("Sensors & Support").fontWeight(.bold).foregroundColor(lightGray).padding(.vertical).padding(.leading, 30).font(.system(size: 15))
            HStack {
                VStack {
                    ForEach(sensorsAndSupports.indices, id: \.self) { i in
                        Text(sensorsAndSupports[i].name).font(.custom("Gill Sans", size: 12)).padding(.trailing).foregroundColor(.gray).frame(maxHeight: .infinity)
                    }
                }
                VStack {
                    ForEach(sensorsAndSupports.indices, id: \.self) { i in
                        MyNodeView(myNode: $sensorsAndSupports[i])
                    }
                }
            }.padding(.horizontal, 30)
        }
    }
//
    var fourthGroup : some View {
        Group {
            Text("ATMOSPHERICS").fontWeight(.bold).font(.subheadline)
                .foregroundColor(Color(hue: 0.651, saturation: 1.0, brightness: 0.465))
                .multilineTextAlignment(.center).padding(.vertical).frame(maxWidth: .infinity)

            ForEach(0 ..< atmospherics.count, id: \.self) { (i:Int) in //<-- HERE
                HStack {
                    Menu {
                        ForEach(0 ..< conditions.count) { (j:Int) in //<-- HERE
                            Button(conditions[j]) {
                                atmosphericsSeverity[i] = conditions[j]
                            }
                        }
                    } label: {
                        Text(atmospherics[i])
                        Image(systemName: "cloud.drizzle")
                   }
                    .frame(maxWidth: .infinity)
                    Text("Current: " + atmosphericsSeverity[i]).frame(maxWidth: .infinity).font(.footnote).foregroundColor(.gray)
                }
                .padding()
                .foregroundColor(.white).background(LinearGradient(gradient: Gradient(colors: [Color.black, Color.blue]), startPoint: .leading, endPoint: .trailing))
                .cornerRadius(10)
                .padding()
            }
        }
    }
//
    var fifthGroup : some View {
        Group {
            Text("HELIOSPHERICS").fontWeight(.bold).font(.subheadline)
                .foregroundColor(Color(hue: 0.651, saturation: 1.0, brightness: 0.465))
                .multilineTextAlignment(.center).padding(.vertical).frame(maxWidth: .infinity)
            ForEach(0 ..< heliospherics.count, id: \.self) { (i:Int) in //<-- HERE
                HStack {
                    Menu {
                        ForEach(0 ..< conditions.count) { (j:Int) in //<-- HERE
                            Button(conditions[j]) {
                                heliosphericsSeverity[i] = conditions[j]
                            }
                        }
                    } label: {
                        Text(heliospherics[i])
                        Image(systemName: "cloud.drizzle")
                   }.frame(maxWidth: .infinity)
                    Text("Current: " + heliosphericsSeverity[i]).frame(maxWidth: .infinity).font(.footnote).foregroundColor(.gray)
                }.padding()
                .foregroundColor(.white).background(LinearGradient(gradient: Gradient(colors: [Color.black, Color.blue]), startPoint: .leading, endPoint: .trailing))
                .cornerRadius(10)
                .padding()
            }
        }
    }
    
    var lastButtons : some View {
        HStack {
            Button("Cancel") {
                self.presentationMode.wrappedValue.dismiss()
            }.frame(maxWidth: .infinity)
            Button("Run"){
                let jsonObj: Any = ["Threats": [], "launchPlatforms": availableLaunchPlatformSelections, "defensiveLayers": defensiveLayers.map({ ["layer": $0.name, "percentage": Int($0.percent) ] }), "sensorsAndSupports": sensorsAndSupports.map({ ["SensorSupport": $0.name, "percentage": Int($0.percent) ] }), "atmospherics:": atmosphericsSeverity.map({ ["weather": "", "intensity": $0 ] })]
                print(convertJSON(array: jsonObj))
            }.foregroundColor(.red).frame(maxWidth: .infinity)
        }.frame(maxWidth: .infinity).padding(.all, 30)
    }
    
    var body: some View {
        ScrollView {
            VStack(alignment: .leading) {
                topSection
                
                firstGroup

                secondGroup

                thirdGroup

                fourthGroup
                
                fifthGroup
                
                lastButtons
            }
        }.onAppear() {
            onAppearFunc()
        }
    }
    
    func onAppearFunc() {
        loadOpConditions(country: battery.replacingOccurrences(of: " ", with: ""), completionHandler: { (data: [Dictionary<String, Any>]) in

            for row in data {
                for _ in row["atmosperics"] as! [String]
                {
                    atmosphericsSeverity.append("light")
                }
                for i in row["heliospherics"] as! [String]
                {
                    heliosphericsSeverity.append("light")
                }
                heliospherics = row["heliospherics"] as! [String]
                atmospherics = row["atmosperics"] as! [String]
                for i in row["sensorsAndSupport"] as! [String]
                {
                    sensorsAndSupports.append(Sliders(percent: 0, name: i))
                }
                for i in row["defensiveLayers"] as! [String]
                {
                    defensiveLayers.append(Sliders(percent: 0, name: i ))
                    
                }
                availableLaunchPlatforms = row["availableLaunchPlatforms"] as! [String]
            }

        })
    }
    
    func convertJSON(array: Any) -> String
    {
        do {
            let jsonData = try JSONSerialization.data(withJSONObject: array, options: [])
            if let jsonString = String(data: jsonData, encoding: String.Encoding.utf8) {
                //print(jsonString)
                return jsonString
            }
            else
            {
                return ""
            }
        } catch {
            return "error"
        }
    }
    
    
    func loadOpConditions(country: String, completionHandler: @escaping ([Dictionary<String, Any>]) -> Void) -> Void {
        
        var request = URLRequest(url: URL(string: "https://salusdatalab.com/api/OperatingConditions/" + country)!,timeoutInterval: Double.infinity)
        request.httpMethod = "GET"
        //        request.addValue("Bearer \(LoginViewController.myToken.bearerToken)", forHTTPHeaderField: "Authorization")
        
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            guard let data = data
            else {
                //p rint(String(describing: error))
                return
            }
            //p rint(String(data: data, encoding: .utf8)!)
            guard let json = try? JSONSerialization.jsonObject(with: data, options: .mutableContainers)
            else { return }
            guard let rootArray = json as? Array<Dictionary<String,Any>>
            else { return }
            
            // The outer/root array seems useless from what you have shown in your JSON above, so this is to get to the array of dictionaries.
            
            completionHandler(rootArray)
            
        }
        
        task.resume()
        
    }
}