4

我尝试将数据从 @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 数组应该从环境对象中获取 Int。

我该如何解决这个问题?

4

2 回答 2

1

做你的

theme: themeModel = themeData[countRecognizer.themeCount]

.onAppear(...)
于 2020-04-20T10:02:59.020 回答
0

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

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

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

  • themeModel应该ThemeModel
  • themeCounter应该ThemeCounter
  • videoCard应该VideoCard
于 2020-04-20T10:17:47.583 回答