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

Posted

技术标签:

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

我有这个从 Xcode 12 beta 5 开始的多平台应用程序项目, 3 天前我从 App Store 将 Xcode 更新到最新版本(12.0,build 12A7209),现在这段代码有问题

.navigationBarItems(trailing: HStack 
       Button(action: 
           self.showSettings.toggle()
        , label: 
           Image(systemName: "gear").font(.system(size: 30))
        )
        .sheet(isPresented: $showSettings, content: 
           SettingsView(showSheet: $showSettings)
        )
  )

当我尝试添加前导 HStack 时:

.navigationBarItems(leading: HStack 
        Button("Hello") 
             print("Hello")
        
    , trailing: HStack 
       Button(action: 
           self.showSettings.toggle()
        , label: 
           Image(systemName: "gear").font(.system(size: 30))
        )
        .sheet(isPresented: $showSettings, content: 
           SettingsView(showSheet: $showSettings)
        )
  )

我收到此错误:编译器无法在合理的时间内对该表达式进行类型检查;尝试将表达式分解为不同的子表达式

编辑:我试图在一个新项目中复制它,但我没有收到错误,所以这只发生在这个“旧”项目上

【问题讨论】:

尝试将你的 HStack 重构为一个小函数。 无法复制。您的代码为我编译(填写时)。请显示minimal reproducible example - 应该实际编译但给出此错误的完整示例。 【参考方案1】:

正如已经提到的,将代码分成更小的部分应该可以解决这个问题。但是,自从更新到 Xcode 12 后,每当代码中出现任何错误时,例如错误的变量名,似乎都会抛出此错误。

查看您的代码,我看不到任何错误。确保SettingsView 也没有错误。

【讨论】:

【参考方案2】:

我解决了用我创建的单独的自定义视图替换 HStack 的问题。 我不知道他为什么给我这个错误,它适用于其他项目。

.navigationBarItems(leading: HStack
      Button(action: 
          self.showSettings.toggle()
      , label: 
          Image(systemName: "gear").font(.system(size: 25))
      )
      .sheet(isPresented: $showSettings, content: 
            SettingsView(showSheet: $showSettings)
      )
, trailing: AddTaskButton().environmentObject(self.stateController))

【讨论】:

【参考方案3】:

那里有很多关于如何加快编译和类型检查的文章,但对我帮助最大的文章是将类型添加到所有变量中,例如 var showSheet: Bool,当我遇到问题时,我将类型检查警告 -Xfrontend -warn-long-expression-type-checking=<limit> 添加到 Build Settings>Swift Compiler>Custom Flags>Other Swift Flags 我从 400 开始,然后从那里开始工作。https://www.avanderlee.com/optimization/analysing-build-performance-xcode-10/

【讨论】:

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

使用下载的 pkg 文件时,xcode 命令行工具安装在哪里?

无法使用 Xcode 12.0 beta 5 构建项目

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

无法在 macOS Monterey 版本 12.0 Beta 中安装 Cocoapods - Xcode 13.0(13A233)

从声称 SDK 12.0 小于 SDK 11 的 xcode 提交 iOS 应用程序的问题

构建设置中缺少 Xcode 12 beta 有效架构