i'm having trouble modifying an optional environment object. i'm using the .environment modifier to pass along an optional object to other views. to access it in other views, i have to get it through an @Environment property wrapper. but i can't modify it even if i redeclare it in the body as @Bindable. here's an example code:
@main
struct MyApp: App {
@State private var mySession: MySession?
var body: some Scene {
HomeScreen()
.environment(mySession)
}
}
now for the HomeScreen:
struct HomeScreen: View {
@Environment(MySession.self) private var mySession: MySession?
var body: some View {
@Bindable var mySession = mySession
Button {
mySession = MySession()
} label: {
Text("Create Session")
}
}
}
an error shows up in the @Bindable declaration saying init(wrappedValue:)' is unavailable: The wrapped value must be an object that conforms to Observable
. but MySession is declared as @Observable. in fact it works just fine if i don't make the environment optional, but i have to setup MySession in the root of the app, which goes against the app flow.