Environment Object Method error in Scene Delegate

161 views Asked by At

SO Community

I have been self-teaching myself SwiftUI and I've just come across a problem while creating an application in the Scene Delegate. When I add an environment object method to the scene delegate to assign an object to the environment of a view hierarchy, Xcode sends these errors on my let contentView = ContentView().environmentObject(delegate.myData) line of code, "Expected member name following '.' ", and "Missing argument for parameter 'appData' in call ".

I will also attach a picture of my ContentView.swift File to show where I placed my @EnviromentObject reference within the body Content View. If you guys have any questions can you please try to help me out, this has been a bum time. Thanks.

Link to Scene Delegate.Swift file : enter image description here Link to ContentView.Swift file : enter image description here

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

var window: UIWindow?


func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options 
     connectionOptions: UIScene.ConnectionOptions) {
    
    let app = UIApplication.shared
    let delegate = app.delegate as! AppDelegate
    
     let contentView = ContentView()
             .environmentObject(delegate.myData)

 
    if let windowScene = scene as? UIWindowScene {
        let window = UIWindow(windowScene: windowScene)
        window.rootViewController = UIHostingController(rootView: contentView)
        self.window = window
        window.makeKeyAndVisible()
    }
  }
1

There are 1 answers

0
jnpdx On

EnvironmentObjects are not passed via parameter like you're trying to do in your ContentView initializer. Instead, they are passed "magically" behind-the-scenes and exposed via the @EnvironomentObject property wrapper.

My suggestion is to get rid of your init method and use onAppear { } to set your contentData fields:

var body: some View {
  VStack {
    //...
  }.onAppear {
    // do initial setup
  }
} 

You should also make sure that you're using the same capitalization of appData -- you're using appdata sometimes, which is leading to many of your compilation errors.