Highlights from WWDC 2024: What’s New in SwiftUI

Shubhransh Gupta
3 min readJun 15, 2024

--

At WWDC 2024, Apple introduced a slew of exciting updates to SwiftUI that promise to make app development more efficient and powerful. Here’s a breakdown of the major changes, explained in simple terms with practical examples and details on the required iOS versions.

1. Observable and Bindable Macros

Simplifying State Management

Available in: iOS 17, macOS 14.
Before:
Traditionally, managing state in SwiftUI involved using ObservableObject and @Published. This meant a lot of boilerplate code and sometimes inefficient updates.

class User: ObservableObject {
@Published var age: Int = 0
@Published var name: String = ""
}

After: Now, with the @Observable macro, you can simplify your state management. The new @Bindable property wrapper makes it easier to create bindings.

import Observation
@Observable class User {
var age: Int = 0
var name: String = ""
}
// Usage in a SwiftUI view
struct ContentView: View {
@Bindable var user: User

var body: some View {
Text("Age: \(user.age)")
TextField("Name", text: $user.name)
}
}

This new approach ensures that only the necessary parts of the UI update, improving performance and reducing unnecessary code.

2. Enhanced List and Table Features

Adding Swipe Actions to Lists

Available in: iOS 17, macOS 14
New Feature:
SwiftUI now supports swipeActions, which lets you add actions that appear when you swipe an item in a list.

List {
ForEach(items) { item in
Text(item.name)
.swipeActions {
Button("Delete") {
// Action
}.tint(.red)
}
}
}

Creating Tables

Available in: iOS 17, macOS 14
New Feature:
SwiftUI introduces a Table view for handling tabular data more efficiently.

struct ContentView: View {
var data = [
("Apple", 50),
("Banana", 30),
("Cherry", 20)
]

var body: some View {
Table(data, id: \.0) { item in
TableColumn("Fruit", value: \.0)
TableColumn("Quantity", value: \.1)
}
}
}

Tables support sorting, selection, and more, making it easier to present and manipulate data in your app.

3. Chart Improvements

Creating Interactive Pie Charts

Available in: iOS 17, macOS 14
SwiftUI Charts have been enhanced with new features, including SectorMark for interactive pie charts.

struct DonutChart: View {
var salesData = [("Apple", 50), ("Banana", 30), ("Cherry", 20)]

var body: some View {
Chart(data: salesData, id: \.0) { element in
SectorMark(
angle: .value("Sales", element.1),
innerRadius: .ratio(0.6)
).foregroundStyle(by: .value("Fruit", element.0))
}
}
}

This makes it easier to visualize data in a more engaging way.

4. State and Environment Enhancements

Passing State into Environment

Available in: iOS 17, macOS 14
You can now pass @State properties into the environment, which streamlines how state is shared across views.

@main
struct MyApp: App {
@State private var currentUser: User?

var body: some Scene {
WindowGroup {
ContentView()
.environment(currentUser)
}
}
}

struct ContentView: View {
@Environment(User.self) private var currentUser: User?

var body: some View {
if let user = currentUser {
Text("Welcome, \(user.name)")
} else {
Text("Please log in")
}
}
}

This enhancement simplifies the process of passing state through the view hierarchy.

5. SF Symbols and Graphics

New SF Symbols and Rendering Modes

Available in: iOS 17, macOS 14
Apple added many new SF Symbols and introduced hierarchical and palette rendering modes, which improve the visual quality and customization of icons in your app.

Image(systemName: "star.fill")
.symbolRenderingMode(.hierarchical)
.foregroundStyle(.blue)

Using Materials for Blurry Backgrounds

Available in: iOS 17, macOS 14
You can now use materials to create blurry, translucent backgrounds, adding depth to your UI.

Text("Hello, World!")
.background(.ultraThinMaterial)

6. StoreKit Integration

SubscriptionStoreView for In-App Purchases

Available in: iOS 17, macOS 14
SwiftUI now includes a SubscriptionStoreView to simplify presenting in-app purchase options.

import StoreKit
struct ContentView: View {
var body: some View {
SubscriptionStoreView(groupID: "com.example.app.subscriptions") {
Text("Subscribe for more features!")
}
}
}

This makes it easier to implement and customize subscription-based features in your app.

These updates to SwiftUI, introduced at WWDC 2024, promise to make app development faster, more efficient, and more enjoyable. By leveraging these new features, you can create more responsive and visually appealing apps with less code and complexity. Happy coding!

https://www.linkedin.com/in/shubhransh-gupta/

--

--

Shubhransh Gupta

I write about: 🧩 SwiftUI techniques and best practices 📱 iOS development tips and tricks ⚡️ Optimizing app performance