2

How to assign the @State value secondMarked from one view to a @Published sampleViewModel property? like sampleViewModel.secondMarked

Here is the example:

 struct ContentView: View {
    @EnvironmentObject var sampleViewModel: sampleViewModel
            @State var firstMarked = false
            @State var secondMarked = true 
            @State var thirdMarked = false
    
    var body: some View {
        VStack {
            CheckboxField(id: "Completed", label: "Completed", isMarked: $firstMarked)
            CheckboxField(id: "Completed", label: "Completed", isMarked: $secondMarked)
            CheckboxField(id: "Completed", label: "Completed", isMarked: $thirdMarked)
        }
        .padding()
    }
}
JIANG
  • 1,687
  • 2
  • 19
  • 36

2 Answers2

2

Instead of having @State and a @Published property for it, just use one.

For example, yours:

CheckboxField(id: "Completed", label: "Completed", isMarked: $firstMarked)

Try this:

CheckboxField(id: "Completed", label: "Completed", isMarked: $sampleViewModel.firstMarked)
George
  • 25,988
  • 10
  • 79
  • 133
1

We can do that with use of .onChange modifier, like

CheckboxField(id: "Completed", label: "Completed", isMarked: $secondMarked)
  .onChange(of: secondMarked) {
     sampleViewModel.secondMarked = $0     // << here !!
  }
Asperi
  • 228,894
  • 20
  • 464
  • 690