Loading...

@Published in SwiftUI

question swiftui swift
Ram Patra Published on August 31, 2024

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:

  1. Declaration: When you mark a property with @Published, you’re indicating that changes to this property should be observed.

  2. ObservableObject: The class containing @Published properties must conform to the ObservableObject protocol. This protocol allows the class to broadcast that a property has changed.

  3. 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, the ContentView 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.

Presentify

Take your presentation to the next level.

FaceScreen

Put your face and name on your screen.

ToDoBar

Your to-dos on your menu bar.

Ram Patra Published on August 31, 2024
Image placeholder

Keep reading

If this article was helpful, others might be too

question swiftui macOS January 26, 2024 How to hide the title bar in a SwiftUI macOS app?

Let’s say you have a view named ContentView and your main App file looks like this:

question swiftui macos September 3, 2024 Two ways to open a window programmatically in SwiftUI

SwiftUI provides an openWindow environment variable on macOS that allows you to open windows programmatically. Here’s how you can use it to open a new window when a button is clicked:

question swiftui swift August 31, 2024 @StateObject vs @ObservedObject in SwiftUI

In SwiftUI, both @StateObject and @ObservedObject are property wrappers used to manage state in your views, specifically when working with objects that conform to the ObservableObject protocol. However, they serve slightly different purposes and have different use cases. Here’s a breakdown: