Swiftui:@environmentObject-无法在属性初始化程序中使用实例成员;属性初始值设定项在“自我”可用之前运行

时间:2020-04-20 09:57:11

标签: swiftui environmentobject

我尝试将数据从@environmentObject传递到TopLevel中的@State对象

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数组应该从环境Object中获取Int。

如何解决此问题?

2 个答案:

答案 0 :(得分:1)

做你的

theme: themeModel = themeData[countRecognizer.themeCount]

.onAppear(...)

答案 1 :(得分:0)

您不能直接从另一个属性的初始值使用countRecognizer,而且没有简单的解决方法。

我建议您考虑将@State var theme属性重构为@Published var theme ObservableObject内部的themeCounter。 Apple教程将帮助您:https://developer.apple.com/tutorials/swiftui/tutorials

顺便说一句:不要用小写字母命名类型。

  • themeModel应该是ThemeModel
  • themeCounter应该是ThemeCounter
  • videoCard应该是VideoCard