Back to Swift Reference
📱 SwiftUIIntermediateiOS 17+ for @Observable in environment

Environment & Dependency Injection

Share models and system values down the view tree without passing them through every initializer.

Read system values like colorScheme, dismiss or modelContext with @Environment(\.key).

Inject your own @Observable models with .environment(model) and read them with @Environment(Model.self).

environment.swift
1@Observable
2final class Session {
3    var userName = "Guest"
4}
5
6@main
7struct BeeApp: App {
8    @State private var session = Session()
9
10    var body: some Scene {
11        WindowGroup {
12            ProfileView()
13                .environment(session)
14        }
15    }
16}
17
18struct ProfileView: View {
19    @Environment(Session.self) private var session
20    @Environment(\.dismiss) private var dismiss
21
22    var body: some View {
23        Text("Hi, \(session.userName)")
24    }
25}

Common pitfalls

  • Reading an environment object that was never injected crashes at runtime — inject it in previews too.

Still unclear? Ask BeeAI about Environment & Dependency Injection.

Get a tailored explanation, or paste your own code for a Swift 6 review. Free members get daily questions — Pro is unlimited.

Ask BeeAI

Become a Founding Pro member: unlimited BeeAI, upcoming Swift paths and every new reference entry first.

See Pro Plans