SwiftUI 1.0 (2019) was an exciting preview. SwiftUI 2.0 (WWDC 2020) is the framework you can build production apps with. Apple’s declarative UI toolkit now has a complete app lifecycle model, better state management primitives, lazy containers for large data sets, and the mesmerising matchedGeometryEffect for fluid transitions.
The App Protocol: No More AppDelegate
SwiftUI 2.0 introduces a pure Swift app entry point:
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
No AppDelegate, no SceneDelegate — just a struct conforming to App.
@StateObject vs @ObservedObject
The distinction matters: use @StateObject to own an observable object (it is created once and survives view rebuilds). Use @ObservedObject when the object is owned elsewhere and passed in:
class ProfileViewModel: ObservableObject {
@Published var name = ""
@Published var isLoading = false
}
struct ProfileView: View {
@StateObject private var vm = ProfileViewModel()
var body: some View {
TextField("Name", text: $vm.name)
}
}
Lazy Containers for Large Data
LazyVStack and LazyHStack only render visible items — essential for long lists. Combined with ScrollView, they replace UITableView for most use cases with far less boilerplate.
matchedGeometryEffect: Hero Animations
Hero transitions between views with a single modifier:
@Namespace var animation
// Source view
Image("thumbnail").matchedGeometryEffect(id: "hero", in: animation)
// Destination view
Image("thumbnail").matchedGeometryEffect(id: "hero", in: animation)
SwiftUI automatically animates the transition between the two views. What would have required hundreds of lines of UIKit animation code is now three lines.
Grid (iOS 14)
LazyVGrid and LazyHGrid provide flexible grid layouts. Define column widths with GridItem:
let columns = [GridItem(.adaptive(minimum: 160))]
LazyVGrid(columns: columns, spacing: 16) {
ForEach(items) { item in ItemCard(item: item) }
}
Should You Drop UIKit?
For new apps targeting iOS 14+, SwiftUI is a viable primary UI framework. For complex custom controls, certain animations, and features not yet available in SwiftUI, UIKit interoperability via UIViewRepresentable and UIViewControllerRepresentable bridges the gap.
SwiftUI 2.0 makes declarative iOS development genuinely productive. The framework’s pace of improvement is remarkable — and it’s only going to get better at WWDC 2021.