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).

Tags:

Swiftui