Xcode 12 中的类型检查错误:“编译器无法在合理的时间内对该表达式进行类型检查”

Posted

技术标签:

【中文标题】Xcode 12 中的类型检查错误:“编译器无法在合理的时间内对该表达式进行类型检查”【英文标题】:Type-check error in Xcode 12: "The compiler is unable to type-check this expression in reasonable time" 【发布时间】:2020-09-21 10:26:55 【问题描述】:

几天前我已将我的 Xcode 更新到版本 12。当我打开一个现有项目时,新的 Xcode 出现错误:

"编译器无法对这个表达式进行合理的类型检查 时间;尝试将表达式分解为不同的子表达式”

该项目在以前的版本中运行良好。

这是我得到错误的代码:

    import SwiftUI

struct FaqView: View 
    @ObservedObject var viewModel = FaqViewModel()
    @State var sectionState: [String: Bool] = [:]
    
    init()
        UITableView.appearance().backgroundColor = .init(red: 255, green: 255, blue: 255, alpha: 0.0)
        UITableViewCell.appearance().backgroundColor = .init(red: 255, green: 255, blue: 255, alpha: 0.0)
    
    var body: some View 
        GeometryReader  geometry in
             return VStack(spacing: 0) 
                    VStack 
                        CustomHeader(titleText: "FAQ LIST") 
                            DashboardView()
                        
                    
                    .frame(width: geometry.size.width)
                    .padding(.top, 10)
                    .background(Color("B1"))
                    ZStack 
                        Image("App Background")
                            .resizable()
                            .aspectRatio(contentMode: .fit)
                            .offset(y: -geometry.size.height/2.8)
                            .padding(.top, 100)
                        VStack 
                            List 
                                if self.viewModel.faqModel?.payload?.count ?? 0 > 0 
                                    ForEach(self.viewModel.faqModel?.payload?[0] ?? [])  payload in
                                        Text("\(payload.title ?? "")".uppercased())
                                            .foregroundColor(Color("T7"))
                                            .padding(.leading, 22)
                                        ForEach(payload.child ?? [])  section in
                                            Section(
                                                header: HStack 
                                                    Image(self.sectionState[section.title ?? ""] ?? false ? "FAQ Minus Icon" : "FAQ Plus Icon")
                                                        .resizable()
                                                        .frame(width: self.sectionState[section.title ?? ""] ?? false ? 16 : 15, height: self.sectionState[section.title ?? ""] ?? false ? 3 : 15)
                                                    Text(section.title ?? "")
                                                        .foregroundColor(self.sectionState[section.title ?? ""] ?? false ? Color("T2") : Color("T8"))
                                                        .font(.system(size: 16))
                                                        .padding(.top, -2)
                                                
                                                .onTapGesture 
                                                    withAnimation 
                                                        self.sectionState[section.title ?? ""] = !self.isExpanded(section.title ?? "")
                                                    
                                                
                                            ) 
                                                if self.isExpanded(section.title ?? "") 
                                                    VStack 
                                                        Text("\(section.childDescription ?? "")")
                                                            .padding(.leading, 22)
                                                            .foregroundColor(Color("T8"))
                                                    
                                                
                                            
                                        
                                    
                                
                            
                            .listStyle(GroupedListStyle())
                        
                        if self.viewModel.isFAQListAppeared 
                            LoaderView()
                                .offset(y: -70.0)
                        
                    
                    Spacer()
                
                .edgesIgnoringSafeArea(.all)
                .onAppear 
                    self.viewModel.isFAQListAppeared = true
                    self.viewModel.fetchWithAF()
                
            
            
        
        func isExpanded(_ section: String) -> Bool 
            sectionState[section] ?? false
        


struct FaqView_Previews: PreviewProvider 
    static var previews: some View 
        FaqView()
    

如果有人遇到过此错误,请提供帮助。提前致谢。

【问题讨论】:

有时当 Xcode 不匹配错误时会发生这种情况。视图主体本身是否被标记或特定行? "var body: some View" 行出现错误。 【参考方案1】:

我不完全确定,但我认为在 ForEach 中展开可选数组的方式是错误的。不幸的是,我无法验证它,因为我不知道 FaqViewModel 但如果我评论除 ForEach 行之外的所有其他内容,我会收到错误“无法将类型 '[Any]' 的值转换为预期的参数类型 'Range'”

【讨论】:

感谢您的回复。但是我通过提供默认值以安全的方式展开可选数组。我不知道我在哪里做错了。如果您对此有任何线索,请指出吗? @ShawkathSrijon 据我所知,您必须为未包装的后备数组分配一个可以使用的类型。但除此之外,只需尝试注释除 ForEach 行/循环之外的正文内容并检查是否出现错误。 谢谢。我会试试的。

以上是关于Xcode 12 中的类型检查错误:“编译器无法在合理的时间内对该表达式进行类型检查”的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 12.0 12A7209 SwiftUI 错误:编译器无法在合理的时间内对该表达式进行类型检查

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

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

XCode 5 中的错误接收器类型“无效”错误

Xcode - 检查扩展的类型

无法编译SwiftUI ForEach表