SwiftLee Lessons
Imported lesson files are rendered from MDX.
- An introduction to Global Actors (actors)
- Inheritance of actor isolation using the #isolation macro (actors)
- Isolated vs. non-isolated access in actors (actors)
- Understanding actor reentrancy (actors)
- Understanding actors in Swift Concurrency (actors)
- Using a custom actor executor (actors)
- Using a Mutex as an alternative to actors (actors)
- Using isolated synchronous deinit (Updated for Swift 6.2) (actors)
- When and how to use @MainActor (actors)
- Calling async functions in parallel using async let (asyncawait-basics)
- Performing network requests using URLSession and async/await (asyncawait-basics)
- Understanding the order of execution (asyncawait-basics)
- Deciding between AsyncSequence, AsyncStream, or regular asynchronous methods (asyncstream-and-asyncsequences)
- Using AsyncStream and AsyncThrowingStream in your code (asyncstream-and-asyncsequences)
- Working with asynchronous sequences (asyncstream-and-asyncsequences)
- Obtaining your certificate to showcase your knowledge on platforms like LinkedIn (completion-certification)
- An introduction to Swift Concurrency and Core Data (core-data)
- Sendable and NSManageObjects (core-data)
- Using a custom Actor executor for Core Data (advanced) (core-data)
- Concurrency Course Introduction (general)
- Creating a Task timeout handler using a Task Group (general)
- Getting rid of the “threading mindset” (general)
- Global-actor isolated conformances (Updated for Swift 6.2) (general)
- How Threads relate to Tasks in Swift Concurrency (general)
- Introduction to the async/await syntax (general)
- Main Actor Default Actor Isolation and Autogenerated Managed Objects (general)
- Structured vs. Unstructured Tasks (general)
- Task.sleep() vs. Task.yield() (general)
- Writing Async Functions (general)
- The relationship of Swift 6 to Swift Concurrency (introduction-to-swift-concurrency)
- The Swift Concurrency Course Manifesto: The async/await Origin Story (introduction-to-swift-concurrency)
- What is Structured Concurrency? (introduction-to-swift-concurrency)
- Overview of memory management in Swift Concurrency (memory-management)
- Preventing retain cycles when using Tasks (memory-management)
- Challenges in migrating to Swift Concurrency (migrating-existing-code-to-swift-concurrency-swift-6)
- Frequently Asked Questions (FAQ) around Swift 6 Migrations (migrating-existing-code-to-swift-concurrency-swift-6)
- How and when to use @preconcurrency (migrating-existing-code-to-swift-concurrency-swift-6)
- Migrating away from Functional Reactive Programming like RxSwift or Combine (migrating-existing-code-to-swift-concurrency-swift-6)
- Migrating to concurrency-safe notifications (migrating-existing-code-to-swift-concurrency-swift-6)
- Migration tooling for upcoming Swift features (migrating-existing-code-to-swift-concurrency-swift-6)
- Steps to migrate existing code to Swift 6 and Strict Concurrency Checking (migrating-existing-code-to-swift-concurrency-swift-6)
- Techniques for rewriting closures to async/await syntax (migrating-existing-code-to-swift-concurrency-swift-6)
- The Approachable Concurrency build setting (Updated for Swift 6.2) (migrating-existing-code-to-swift-concurrency-swift-6)
- The impact of Swift 6 on Swift Concurrency (migrating-existing-code-to-swift-concurrency-swift-6)
- The six migration habits for a successful migration (migrating-existing-code-to-swift-concurrency-swift-6)
- Using Agent Skills for Swift Concurrency (migrating-existing-code-to-swift-concurrency-swift-6)
- How to choose between serialized, asynchronous, and parallel execution (performance)
- Reducing suspension points by managing isolation effectively (performance)
- Using Xcode Instruments to detect and remove suspension points (performance)
- Using Xcode Instruments to find performance bottlenecks (performance)
- Combining Sendable with custom Locks (sendable)
- Concurrency-safe global variables (sendable)
- Conforming your code to the Sendable protocol (sendable)
- Explaining the concept of Sendable in Swift (sendable)
- Sendable and Reference Types (sendable)
- Sendable and Value Types (sendable)
- Understanding Data Races vs. Race Conditions: Key Differences Explained (sendable)
- Understanding region-based isolation and the sending keyword (sendable)
- Using @Sendable with closures (sendable)
- Using @unchecked Sendable (sendable)
- Detached tasks (tasks)
- Discarding Task Groups (tasks)
- Error handling in Tasks (tasks)
- Introduction to tasks in Swift Concurrency (tasks)
- Managing Task Priorities (tasks)
- Running tasks in SwiftUI (tasks)
- Task Cancellation (tasks)
- Task Groups (tasks)
- Task local storage using @TaskLocal (tasks)
- Testing concurrenct code using Swift Testing (testing-concurrent-code)
- Testing concurrent code using XCTest (testing-concurrent-code)
- Using Swift Concurrency Extras by Point-Free (testing-concurrent-code)
- Controlling the default isolation domain (Updated for Swift 6.2) (threading)
- Dispatching to different threads using nonisolated(nonsending) and @concurrent (Updated for Swift 6.2) (threading)
- Getting rid of the “threading mindset” (threading)
- Understanding Task suspension points (threading)