1 week
1 Week Plan
This plan is for you if your interview is in a few days. It covers only the topics that come up most often. You need some iOS experience already.
Day 1 — Swift basics
0/7 doneStructs are value types and get copied. Classes are reference types and are shared.
QuizEasy3 minsSwiftValue semantics means each copy is independent; copy-on-write makes copies cheap by sharing storage until someone mutates it.
QuizMedium3 minsSwiftPerformanceAn optional either holds a value or nil; unwrap it with if let, guard let, ?? or optional chaining instead of force unwrapping.
QuizEasy2 minsSwift- What is an escaping closure in Swift?Asked often
An escaping closure can be called after the function that received it returns, so it must be marked @escaping and you must think about what it captures.
QuizEasy2 minsSwiftMemory & ARC Protocol-oriented programming means building behavior from small protocols with default implementations, instead of deep class inheritance.
QuizMedium2 minsSwiftProtocolsFind the two numbers in an array that add up to a target, in one pass.
Swift codingEasy15 mins7 testsAlgorithmsData structuresCheck that every bracket in a string is closed by the same type, in the right order.
Swift codingEasy15 mins9 testsAlgorithmsData structures
Day 2 — Memory and ARC
0/6 done- How does ARC work in Swift?Asked often
ARC counts strong references to each class instance and frees the instance as soon as the count reaches zero, with retain and release calls inserted by the compiler.
QuizMedium3 minsMemory & ARCSwift A strong reference keeps an object alive, a weak reference does not and becomes nil when the object dies, and an unowned reference does not and crashes if used after the object dies.
QuizEasy3 minsMemory & ARCA retain cycle happens when objects hold strong references to each other so their counts never reach zero; you break it by making one link weak or unowned.
QuizMedium2 minsMemory & ARC- What is a capture list in a Swift closure?Asked often
A capture list, like [weak self] or [count], controls how a closure captures values, either by making references weak or by copying a value at creation time.
QuizMedium3 minsSwiftMemory & ARC Build a generic cache that drops the least recently used item when it is full. Every operation must be O(1).
Swift codingMedium30 mins10 testsData structuresGenericsGroup words made of the same letters by using a dictionary with a smart key.
Swift codingMedium20 mins9 testsAlgorithmsData structures
Day 3 — Concurrency
0/7 doneGCD is a lightweight C-based API for running closures on queues, while OperationQueue is a higher-level Objective-C API built on GCD that adds dependencies, cancellation and concurrency limits.
QuizMedium2 minsConcurrency- How does async/await work in Swift?Asked often
An async function can pause at each await without blocking its thread, letting Swift run other work on that thread until the result is ready.
QuizMedium2 minsConcurrency An actor is a reference type that protects its mutable state by running only one task at a time on it, and reentrancy means its state can change while one of its methods is suspended at an await.
QuizMedium2 minsConcurrency@MainActor is a global actor that runs code on the main thread, and marking UI types and methods with it lets the compiler check that UI updates happen there.
QuizMedium2 minsConcurrencyA deadlock is when threads wait for each other forever, a data race is unsynchronized access to the same memory with at least one write, and a race condition is a logic bug that depends on timing.
QuizMedium3 minsConcurrencyRun an action only after the calls stop for a short time, like a search box that waits until the user stops typing.
Swift codingMedium25 mins9 testsConcurrencySwiftBuild a bank account as an actor so many tasks can deposit, withdraw and transfer at the same time without data races.
Swift codingEasy15 mins10 testsConcurrencySwift
Day 4 — UIKit and SwiftUI
0/6 done- Explain the UIViewController lifecycle.Asked often
A view controller creates its view, loads it once in viewDidLoad, then gets appear and disappear callbacks every time it shows or hides.
QuizEasy2 minsUIKitApp lifecycle Auto Layout solves a set of constraint equations to find each view's frame, and hugging and compression resistance priorities decide which view grows or shrinks first.
QuizMedium2 minsUIKitA table view keeps a small pool of cells and reuses them for new rows, so you must fully reset each cell or you will see old data.
QuizEasy2 minsUIKitPerformanceThe @State wrapper owns data inside a view, @Binding gives a child read-write access to someone else's data, @Bindable makes bindings to an @Observable object, and @Environment reads shared values from above.
QuizMedium2 minsSwiftUISwiftUI uses identity to decide if a view is the same one as before, and identity controls how long state lives and whether changes animate or reset.
QuizHard2 minsSwiftUIPerformanceBuild an email and password form with live validation, a loading state, server errors and good keyboard focus.
SwiftUIMedium40 minsSwiftUIConcurrencyAccessibility
Day 5 — Architecture and networking
0/6 doneMVC is simple but leads to huge view controllers, MVVM moves logic into a testable view model, VIPER splits a screen into many small roles, and TCA uses one state, actions and a reducer.
QuizMedium3 minsArchitectureDependency injection means an object gets its dependencies from outside instead of creating them, which makes code easy to test and change.
QuizMedium2 minsArchitectureTestingBuild a URLRequest, call try await session.data(for:), check the HTTP status code, then decode the data, and choose a session configuration for caching, timeouts or background transfers.
QuizEasy2 minsNetworkingConcurrencyCodable lets the compiler generate encoding and decoding code, and you customize it with CodingKeys, decoder strategies or a hand-written init(from:).
QuizEasy1 minsNetworkingSwiftDecode a real-looking API response with snake_case keys, ISO 8601 dates, nested and optional fields, and an enum that survives new values.
Swift codingMedium25 mins11 testsSwiftNetworkingRetry a failing async operation, and double the wait time after each failure.
Swift codingMedium20 mins8 testsConcurrencyNetworking
Day 6 — Algorithms in Swift
0/6 doneWhen to use two pointers, sliding window, hashing, binary search and prefix sums, with a short Swift template for each.
GuideEasy3 minsMerge overlapping calendar events into busy blocks by sorting first, then scanning once.
Swift codingMedium20 mins9 testsAlgorithmsCount how often each hashtag is used and return the k most popular ones.
Swift codingMedium20 mins9 testsAlgorithmsData structuresFind the longest run of unique characters with a sliding window and a dictionary.
Swift codingMedium20 mins10 testsAlgorithmsData structuresReverse a singly linked list in place by turning every next pointer around.
Swift codingEasy15 mins8 testsAlgorithmsData structuresCount connected regions of filled pixels in a mask with flood fill (the "number of islands" problem).
Swift codingMedium20 mins9 testsAlgorithms
Day 7 — System design and behavioral
0/5 doneA step-by-step plan for the round, with time boxes, what to say at each step, and a worked example.
GuideEasy5 minsBuild a Kingfisher-style library with a memory and disk cache, shared in-flight requests, downsampling, and safe cancellation in reused cells.
System designHard1hSystem designPerformanceMemory & ARCDesign a social feed with cursor pagination, prefetching, optimistic likes and an offline cache that opens instantly.
System designMedium45 minsSystem designArchitectureNetworkingBuild a list that loads the next page before the user reaches the end, with loading, error and empty states.
SwiftUIMedium45 minsSwiftUIConcurrencyNetworkingHow to answer "Tell me about a time…" questions with the STAR method, with 10 common questions and short sample answers from iOS work.
GuideEasy9 mins