SwiftUI pop view upon observable event

Viewed 32

I am trying to pop a SwiftUI view upon a particular event from an observed object. How can I do this? This code does not work because I can't refer to self inside the sink method.

struct MyView: View {
  @Environment(\.presentationMode) var presentationMode
  @ObservedObject var observable: MyObservable

  init() {
    observable.$state.sink { state in    // !! Escaping closure captures mutating 'self' parameter !!
      presentationMode.wrappedValue.dismiss()
    }
  }
}
1 Answers

You don't need publisher here and definitely should not do this in init because at least environment is not available there (even you'd solve all others errors).

You just need to observe changes of state in regular way, like below

var body: some View {
    Text("Some view here")
        .onChange(of: observable.state) { newState in
            // depending on newState your decision here
            presentationMode.wrappedValue.dismiss()
        }
}
Related