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

Я пытаюсь передать данные из @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 'is available'

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

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

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

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

Я предлагаю вам рассмотреть возможность рефакторинга вашего свойства @State var theme в @Published var theme внутри themeCounter ObservableObject. Обучающие программы Apple помогут вам: https://developer.apple.com/tutorials/swiftui/tutorials

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

  • themeModel должно быть ThemeModel
  • themeCounter должно быть ThemeCounter
  • videoCard должно быть VideoCard
0 голосов
/ 20 апреля 2020

делай

theme: themeModel = themeData[countRecognizer.themeCount]

в

.onAppear(...)
...