Change to @Published var in @EnvironmentObject not reflected immediately
A couple of things.
- Your setup doesn't work if you move the Button into
MasterView
either. - You don't have a
import Combine
in your code (don't worry, that alone doesn't help).
Here's the fix. I don't know if this is a bug, or just poor documentation - IIRC it states that objectWillChange
is implicit.
Along with adding import Combine
to your code, change your UserData
to this:
final class UserData: NSObject, ObservableObject {
var objectWillChange = PassthroughSubject<Void, Never>()
@Published var changeView: Bool = false {
willSet {
objectWillChange.send()
}
}
}
I tested things and it works.
Changing
final class UserData: NSObject, ObservableObject {
to
final class UserData: ObservableObject {
does fix the issue in Xcode11 Beta6. SwiftUI does seem to not handle NSObject
subclasses implementing ObservableObject
correctly (at least it doesn't not call it's internal willSet
blocks it seems).