Swift & SwiftUI
roadmap.sh: https://roadmap.sh/swift-ui
Suggested path through the Swift & SwiftUI nodes. Each node links to its lesson when written.
Nodes
Swift language basics
- Variables & constants
- Value & reference types
- Optionals
- Control flow
- Functions
- Closures
- Enums
- Structs & classes
- Properties & observers
- Collections (Array, Set, Dictionary)
Swift advanced
- Protocols
- Protocol-oriented programming
- Generics
- Extensions
- Error handling
- Property wrappers
- Result builders
- Concurrency (async/await)
- Actors
- Memory management (ARC)
Tooling
- Xcode
- Swift Package Manager
- Previews & canvas
- Asset catalogs
- Simulator & devices
SwiftUI fundamentals
- App & Scene structure
- View protocol
- Text & Image
- Modifiers
- Stacks (VStack, HStack, ZStack)
- Spacer & Divider
- Buttons & controls
- Lists
- ForEach
- ScrollView
- Grids (LazyVGrid / LazyHGrid)
Layout
- Frames & alignment
- GeometryReader
- Safe area
- Padding & spacing
- Custom layouts (Layout protocol)
State & data flow
- @State
- @Binding
- @ObservedObject
- @StateObject
- @EnvironmentObject
- @Environment
- Observable macro (@Observable)
- ObservableObject
- @AppStorage
- @SceneStorage
Navigation & presentation
- NavigationStack
- NavigationSplitView
- Sheets
- Full-screen covers
- Alerts & confirmation dialogs
- Popovers
- TabView
- Programmatic navigation
Forms & input
- Form
- TextField
- Toggle
- Picker
- Slider & Stepper
- DatePicker
- Focus management
Animations & gestures
- Implicit animations
- Explicit animations
- Transitions
- matchedGeometryEffect
- Gestures
- Canvas & shapes
Data & integration
- Networking (URLSession)
- Codable / JSON
- async let & task
- Combine basics
- Core Data integration
- SwiftData
- UIKit interop (UIViewRepresentable)
Quality & delivery
- Accessibility
- Localization
- Dark mode & theming
- Previews for testing
- Unit & UI testing
- Performance & rendering
Resources
See resources.md.
Project ideas
- Build a SwiftData-backed task manager with NavigationStack, swipe actions, and @Observable view models.
- Create an animated onboarding flow using matchedGeometryEffect, custom transitions, and TabView paging.
- Make a movie-search app that hits a REST API with async/await URLSession, decodes via Codable, and renders a LazyVGrid.