History
Loading...
Loading...
August 27, 2025
@State private for view-specific data and @StateObject for ObservableObject instances created by the view. Remember: @StateObject creates the object, @ObservedObject receives it from a parent view.Use `@StateObject` for creating ObservableObject instances within a view, `@ObservedObject` for receiving them from parent views, and `@State` for simple UI-specific values. This creates a clear hierarchy where data flows down and actions flow up.
class UserStore: ObservableObject {
@Published var users: [User] = []
@Published var isLoading = false
}
struct ContentView: View {
@StateObject private var userStore = UserStore()
@State private var showingSheet = false
var body: some View {
NavigationView {
VStack {
if userStore.isLoading {
ProgressView()
} else {
UserListView(userStore: userStore)
}
}
.sheet(isPresented: $showingSheet) {
AddUserView(userStore: userStore)
}
}
}
}
struct UserListView: View {
@ObservedObject var userStore: UserStore
var body: some View {
List(userStore.users) { user in
Text(user.name)
}
}
}This pattern prevents unnecessary object recreation during view updates, ensures proper memory management, and creates predictable data flow. `@StateObject` maintains object lifecycle tied to view lifecycle, while `@ObservedObject` allows sharing state between views without ownership transfer.