Xcode 12.0 12A7209 Ошибка SwiftUI: компилятор не может проверить тип этого выражения в разумные сроки

У меня есть проект многоплатформенного приложения, который я начал с Xcode 12 beta 5, 3 дня назад я обновил Xcode до последней версии (12.0, сборка 12A7209) из App Store, и теперь возникла проблема с этим фрагментом кода.

.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)
        })
  })

Я получаю эту ошибку: Компилятор не может проверить тип этого выражения в разумные сроки; попробуйте разбить выражение на отдельные подвыражения

Изменить: я попытался воспроизвести его в новом проекте, но я не получаю сообщение об ошибке, поэтому это происходит только в этом старом проекте.


person Alessio Rubicini    schedule 22.09.2020    source источник
comment
попробуйте преобразовать свой HStack в небольшую функцию.   -  person JIE WANG    schedule 22.09.2020
comment
Не могу воспроизвести. Ваш код компилируется для меня (при заполнении). Покажите минимальный воспроизводимый пример - полный пример, который действительно должен компилироваться, но вместо этого дает эту ошибку.   -  person matt    schedule 22.09.2020


Ответы (3)


Как уже упоминалось, эту проблему должно решить разбиение кода на более мелкие части. Однако после обновления до Xcode 12 всякий раз, когда в коде возникает какая-либо ошибка, например неправильные имена переменных, эта ошибка, похоже, выдается.

Глядя на ваш код, я не вижу ошибок. Убедитесь, что SettingsView тоже не содержит ошибок.

person kyrers    schedule 22.09.2020

Я решил заменить 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))
person Alessio Rubicini    schedule 22.09.2020

Существует множество статей о том, как ускорить компиляцию и проверку типов, но те, которые помогли мне больше всего, добавили тип ко всем переменным, таким как 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/

person lorem ipsum    schedule 22.09.2020