Swiftui: @environmentObject - нельзя использовать член экземпляра в инициализаторе свойства; инициализаторы свойств запускаются до того, как станет доступным 'self'

Я пытаюсь передать данные из @environmentObject в объект @State в TopLevel

struct ContentView: View {

    @EnvironmentObject var countRecognizer: themeCounter
    @State var theme: themeModel = themeData[countRecognizer.themeCount]

    @State var hideBar = true

    var body: some View {
        ZStack {
            videoCard(theme: theme)
                .statusBar(hidden: true)

            Text("\(self.countRecognizer.themeCount)")

            if hideBar == true {

            }
        }

Но я получаю эту ошибку: "Невозможно использовать член экземпляра в инициализаторе свойства; инициализаторы свойств запускаются до того, как 'self' станет доступным"

массив themeData должен получить Int из объекта среды.

Как я могу исправить эту проблему?

2 ответа

Делай свое

theme: themeModel = themeData[countRecognizer.themeCount]

в

.onAppear(...)

Вы не можете использовать countRecognizer непосредственно из начального значения другого свойства, и здесь нет простого решения.

Предлагаю вам заняться рефакторингом вашего @State var theme собственность в @Published var theme внутри themeCounterObservableObject. Учебники Apple помогут вам: https://developer.apple.com/tutorials/swiftui/tutorials

В качестве отступления: НЕ НАЗЫВАЙТЕ ТИПЫ НАИМЕНОВАНИЕМ.

  • themeModel должно быть ThemeModel
  • themeCounter должно быть ThemeCounter
  • videoCard должно быть VideoCard
Другие вопросы по тегам