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 错误:编译器无法在合理的时间内对该表达式进行类型检查