So I'm trying to update one property of an @EnvironmentObject
. I keep getting this error:
SwiftUI/EnvironmentObject.swift:90: Fatal error: No ObservableObject of type ViewModel found. A View.environmentObject(_:) for ViewModel may be missing as an ancestor of this view.
My code looks like this:
class HomeViewController: UIHostingController<HomeView> {
// MARK: - Public Properties
var topThreePublicUsers = PassthroughSubject<[ExternalUser], Never>()
// MARK: - Private Properties
private var cancellables: Set<AnyCancellable> = []
// MARK: - Initializer
init() {
super.init(rootView: HomeView())
_ = rootView.environmentObject(HomeView.ViewModel())
topThreePublicUsers
.receive(on: DispatchQueue.main)
.assign(to: \.viewModel.topThreePublicUsers, on: rootView)
.store(in:&cancellables)
}
@MainActor required dynamic init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func pushPublicLeaderBoard(viewController: UIViewController) {
if let viewController = viewController as? UIHostingController<PublicLeaderboardView> {
rootView.viewModel.publicLeaderboard = viewController.rootView
}
}
}
struct HomeView: View {
// MARK: - Environment
@EnvironmentObject var viewModel: ViewModel
// MARK: - View Model
class ViewModel: ObservableObject {
@Published var profileView: ProfileView?
}
// MARK: - Body
var body: some View {
viewModel.profileView
}
}
I'm thinking I just can't access the environment externally but I don't know... lil help?