为什么SwiftUI不更新嵌套ForEach循环中的值?

为什么SwiftUI不更新嵌套ForEach循环中的值?,swiftui,Swiftui,我有这个密码。 这很简单。点击按钮时,我将行更改为一行 但只有行“works”中的输出有效,另一个始终为0 我做错了什么 您可以复制并粘贴代码以再现错误 class GlobalData : ObservableObject { @Published var rows : Int = 0 } struct ContentView: View { @ObservedObject var globalData = GlobalData() var body: som

我有这个密码。 这很简单。点击按钮时,我将行更改为一行

但只有行“works”中的输出有效,另一个始终为0

我做错了什么

您可以复制并粘贴代码以再现错误

class GlobalData : ObservableObject {

    @Published var rows : Int = 0
}


struct ContentView: View {

    @ObservedObject var globalData = GlobalData()

    var body: some View {
        VStack {
            Text("\(self.globalData.rows)") // works...
            ForEach (0..<4) { y in
                HStack () {
                    ForEach (0..<3) { x in

                        ForEach (0..<3) { index -> Text in
                            Text("\(self.globalData.rows)") // shows always 0
                        }
                    }
                }
            }
            Button(action: {
                self.globalData.rows = self.globalData.rows + 1
            }) {
                Text("Increase rows")
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
类GlobalData:ObserveObject{
@已发布的变量行:Int=0
}
结构ContentView:View{
@ObservedObject变量globalData=globalData()
var body:一些观点{
VStack{
Text(\(self.globalData.rows)///works。。。

ForEach(0..原因是常量
ForEach(范围)
。如果假设在
ForEach
中有任何更改,请使用动态数据序列

这是一个针对您的案例的解决方案。使用Xcode 11.4/iOS 13.4进行了测试

struct ContentView: View {

    @ObservedObject var globalData = GlobalData()

    var body: some View {
        VStack {
            Text("\(self.globalData.rows)") // works...
            ForEach (Array(0...3), id: \.self) { y in
                HStack () {
                    ForEach (Array(0...2), id: \.self) { x in

                        ForEach (Array(0...2), id: \.self) { index -> Text in
                            Text("\(self.globalData.rows)") // works ...
                        }
                    }
                }
            }
            Button(action: {
                self.globalData.rows = self.globalData.rows + 1
            }) {
                Text("Increase rows")
            }
        }
    }
}