Top 50 Swift & iOS Interview Questions for 2026
iOS interviews stopped being "implement a UITableView" years ago. The 2026 loop is closer to a backend interview wearing an iPhone costume - concurrency, architecture, and tradeoffs - with one round that doubles as a SwiftUI vs UIKit Rorschach test.
These 50 questions are the ones that actually come up. They are organized roughly the way a real loop runs: language fundamentals, frameworks, architecture, tooling, system design.
If you can answer these out loud - not just in your head - you are in shape for the round.
Swift Language Fundamentals (1-12)
- What is the difference between a
structand aclassin Swift, and why does it matter for performance? - Explain value vs reference semantics with a concrete example where the choice changes correctness, not just performance.
- What is copy-on-write and which standard-library types use it?
- Walk me through how ARC handles a parent-child reference cycle. Where do
weakandunownedbelong? - What does
@escapingmean on a closure parameter and when do you actually need it? - Explain
inoutparameters and the law-of-exclusivity rule that the compiler enforces. - What is the difference between
Any,AnyObject,AnyHashable, andSelf? - When would you reach for an
enumwith associated values instead of a protocol with implementations? - How do generics with
whereclauses differ from protocol-as-existential-type? Why has the community moved toward generics? - Explain
somevsanyfor protocol return types. What changed in Swift 5.7+? - What is a result builder, and where have you seen one outside SwiftUI?
- How does
deferinteract with thrown errors and early returns?
Concurrency (13-22)
- Walk me through
async/awaitfrom suspension point to resumption. Where does the runtime store state during a suspension? - What is an actor? When does isolation hurt instead of help?
- Explain
@MainActor. What goes wrong if you slap it on every type? - What is
Sendable, why is the compiler nagging you about it, and how do you fix the warnings without@unchecked? - Compare
Task,Task.detached, andTaskGroup. When is each correct? - How do you cancel a network request started inside a
Task? What happens if you ignore cancellation? - What is structured concurrency and why is it safer than GCD's "just dispatch async and hope" model?
- How do you bridge a callback API (delegate, completion handler) into
async/await? - Strict concurrency checking is on. A library you depend on isn't
Sendable. Walk me through the options. - What is the difference between
AsyncStreamandAsyncThrowingStream? When would you build one yourself?
SwiftUI (23-32)
- How does SwiftUI decide when to re-render a view? What invalidates the body?
- Explain
@State,@Binding,@ObservedObject,@StateObject,@EnvironmentObject, and the Observable macro. When does each match? - What is the difference between an identity in SwiftUI (
.id()) and a structural identity? Why does it matter for animation? - How do you debug a view that re-renders too often? What tools does Xcode give you?
- When should you reach for
GeometryReader, and what is the gotcha that bites every junior dev? - Walk me through how to build a custom layout in SwiftUI 5.
- How does
NavigationStackdiffer from the legacyNavigationView, and what changed about deep linking? - SwiftUI lists with thousands of items - how do you keep scroll smooth?
- How do you embed UIKit views inside SwiftUI and vice versa, and what are the pitfalls of each direction?
- The Observable macro replaced ObservableObject. What did Apple actually change under the hood?
UIKit & Core iOS (33-40)
- Why does
UITableViewCellreuse exist, and what is the bug pattern when you forget to reset state inprepareForReuse? - Explain Auto Layout from constraint priorities to content hugging vs compression resistance.
- What is the responder chain and how do you debug an event that reaches the wrong view?
- How does the run loop relate to UI updates? Why can a network callback show up "one frame late"?
- Compare Core Data, SwiftData, and a Realm/SQLite-direct approach for a cache that has to survive offline.
- When should you use
URLSessiondirectly vs Alamofire vs a generated client like Swift OpenAPI Generator? - How does Keychain access work, and what is the right way to share secrets between an app and an extension?
- Background modes - audio, location, processing, push. Which one keeps your code running, and for how long?
Architecture & Testing (41-46)
- Compare MVVM, VIPER, TCA (The Composable Architecture), and "just a view model and a service." What problem does each actually solve?
- How do you make a view model testable when it depends on a singleton like
URLSession.shared? - What is dependency injection in a Swift codebase? When is a property wrapper the right answer vs a constructor parameter?
- How do you write a snapshot test that does not break every time the design system tweaks a corner radius?
- Explain the testing pyramid for an iOS app. Where do XCUITests fit, and why do teams keep writing too many of them?
- How would you structure a modular Swift Package Manager codebase for an app with 30 features and 5 teams?
System Design (47-50)
- Design the photo upload pipeline for an Instagram-style app. Cover client-side compression, retries, deduplication, and offline behavior.
- Design an iOS push notification system end to end - APNs, your backend, the device, the user. Where does silent push fit?
- Design a real-time messaging client (WebSocket, reconnect, message ordering, local persistence). What is the worst-case race?
- Design an analytics SDK that batches events, survives kill, and never blocks the main thread.
How to Use This List
Do not memorize answers. Pick three questions a day and answer them out loud, on a walk or to a rubber duck. iOS interviews reward people who can talk about tradeoffs, not people who can recite definitions.
If a question makes you blink twice, that is your study target.
Want to drill these in mock-interview format with instant feedback? gitGood does that for $5/month.