SwiftUI ForEach based on State int

后端 未结 2 502
日久生厌
日久生厌 2020-12-22 02:13

I am storing a Int value as State in my View. When I press a button the Int increase by one. This is working fine when I print my int value.

I have now a ForEach loo

2条回答
  •  情话喂你
    2020-12-22 02:53

    from apple docs

    extension ForEach where Data == Range, ID == Int, Content : View {
    
        /// Creates an instance that computes views on demand over a *constant*
        /// range.
        ///
        /// This instance only reads the initial value of `data` and so it does not
        /// need to identify views across updates.
        ///
        /// To compute views on demand over a dynamic range use
        /// `ForEach(_:id:content:)`.
        public init(_ data: Range, @ViewBuilder content: @escaping (Int) -> Content)
    }
    

    So, you have to use (as suggested by Apple)

    struct ContentView: View {
        @State var counter = 0
        var body: some View {
            VStack {
                ForEach(0 ..< counter, id:\.self) { i in
                        Text("row: \(i.description)")
                    }
                Button(action: {
                    self.counter += 1
                }, label: {
                    Text("counter \(counter.description)")
                })
            }
        }
    }
    

提交回复
热议问题