In SwiftUI, the @Published
property wrapper is used in combination with the ObservableObject
protocol to automatically announce changes to properties of a class. This allows SwiftUI views that depend on these properties to update automatically when the data changes.
Here’s how @Published
works:
-
Declaration: When you mark a property with
@Published
, you’re indicating that changes to this property should be observed. -
ObservableObject: The class containing
@Published
properties must conform to theObservableObject
protocol. This protocol allows the class to broadcast that a property has changed. -
View Updates: Views that use this
ObservableObject
can observe changes by using the@ObservedObject
or@StateObject
property wrappers. When a@Published
property changes, any view that depends on it will automatically re-render.
Example
import SwiftUI
import Combine
class UserSettings: ObservableObject {
@Published var username: String = "Anonymous"
}
struct ContentView: View {
@ObservedObject var settings = UserSettings()
var body: some View {
VStack {
Text("Hello, \(settings.username)!")
Button("Change Username") {
settings.username = "New Username"
}
}
}
}
Key Points
- Automatic Updates: When
settings.username
changes, theContentView
automatically updates to reflect the new username. - Publisher:
@Published
creates a publisher for the property, allowing subscribers (like views) to react to changes. - Combine Integration: Behind the scenes,
@Published
integrates with the Combine framework, leveraging its capabilities to handle changes in data streams.
In essence, @Published
is a way to bind data in a way that ensures the UI remains in sync with the underlying data model.