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()
}
}
}
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()
}
}