Limited-time offer: 80% off every plan

See plans

Swift Interview Questions: Answering the Follow-Up

Most Swift interview questions are just the warm-up. Here is a repeatable spoken pattern for the second and third question, when the interviewer asks why your answer is right.

By Emily Miller12 min read

Most Swift interview questions are not the hard part. "What is an optional?" is a warm-up. The hard part arrives two questions later, when the interviewer leans back and asks: why did you choose that, and what breaks if you are wrong?

That follow-up is not a trap. It is a chance to show whether your first answer came from understanding or from recall. This article is about the second and third question, not the first. You will not memorise answers here. You will practise one reasoning pattern until it comes out of your mouth without effort — a pattern that works across most Swift interview questions you are likely to meet.

Why Swift Interview Questions Move Past the First Answer

Definitions are cheap. Anyone can read them the night before. One way to read the shape of a technical interview is that the first question confirms you have the vocabulary, and the rest of the time is spent finding out how you think when the easy answer is already on the table.

That is why the conversation shifts. "What is a struct?" becomes "when would a struct be the wrong call here?" "What is ARC?" becomes "where has this bitten you?" "What is an optional?" becomes "when would you rather model absence with an enum than with nil?" The point is not to catch you out. It is to hear the reasoning that sits behind the definition, because that reasoning is what you will actually use on the job.

So prepare differently. Instead of collecting definitions, collect trade-offs. For each Swift concept you expect to be asked about, know three things: what you would choose, what that choice costs, and what would make you choose otherwise. That is the whole method.

You are not being graded on the first answer

A common mistake is treating the first answer as the exam and the follow-up as a penalty. In practice the follow-up is often where much of the signal is. A candidate who gives a plain definition and then reasons well about its limits often reads better than one who recites a perfect definition and stalls.

The Follow-Up Pattern: Claim, Cost, Condition

Here is a pattern you can use across almost any Swift follow-up. It has three beats:

  1. Claim. State your choice in one sentence.
  2. Cost. Name what that choice costs you.
  3. Condition. Name the condition under which you would change your mind.

Worked example, spoken aloud:

"I'd use a struct here. The cost is copying for large payloads, so if this model got big and was passed around a lot I'd feel it. I'd switch to a class if identity mattered, or if several parts of the app needed to share and mutate the same instance."

That is roughly twenty seconds. It answers the question, shows you know the downside, and hands the interviewer something concrete to push against.

Why this structure survives follow-ups

Because it is already self-critical. When the interviewer asks "what about performance?", you have not been caught out; you named the cost yourself. When they ask "have you ever done that?", you have a condition ready to attach a story to.

It is a pattern, not a script

The words should change every time. If it sounds recited, it stops working, because the interviewer can no longer tell whether you are reasoning or remembering. Practise the shape, not the sentences.

Value Types vs Reference Types: The Follow-Up You Will Actually Get

The first Swift interview question here is often "what is the difference between a struct and a class?" The follow-up is often "when would that choice hurt you?"

Have three costs ready:

  • Copying cost. Structs are copied. For small models that is a feature. For large payloads passed through deep call chains, it is work you did not ask for.
  • Mutation semantics. With a struct, changing a copy does not change the original. That is often what you want, and occasionally the source of a bug where a change seems to vanish.
  • Ripple effects. Choosing a value type pulls equality and hashing into the decision: synthesised Equatable or Hashable conformance is only available when every stored property conforms (and Hashable requires Equatable); if a property should not take part in equality or hashing, you write the conformance by hand instead. Choosing a class means identity, and identity means you now have to think about sharing and lifetime.

"It depends" is only acceptable if you say what it depends on in the same breath. "It depends on whether identity matters — here it doesn't, so I'd take the struct and accept the copy cost." That is a complete answer.

Aim to say the trade-off in under thirty seconds. Long answers lose the thread, and once you lose the thread the interviewer may step in to help — which tends to mean the answer has drifted rather than landed.

Optionals and Unwrapping: Answering 'What Could Go Wrong?'

Most candidates can say that an optional represents absence. The follow-up moves past that: what does your unwrapping choice communicate to the next person reading this code?

A useful framing is that unwrapping style is a statement about your assumptions:

  • guard let says the value may be missing, I have handled that, and the rest of this function can assume it is present.
  • if let says the missing case is a normal branch, not an error.
  • A force unwrap says I believe this cannot be nil here. That belief is sometimes correct and always a claim someone else has to trust.

Spoken end to end, that sounds like this:

"I'd use guard let here. The cost is an early return that adds an exit path and can make a short function read as two functions. I'd switch to if let if the absence were a normal outcome I wanted to handle inline rather than bail out of."

A follow-up you can expect: "where would you draw the line in a codebase you inherited?" A good answer is honest and specific. You might say you would not rewrite everything, that you would fix force unwraps on paths that can genuinely fail, and that you would leave the ones backed by an invariant you can actually point to.

If you would accept a compromise, say so and say why. "I'd leave it, because the cost of changing it is higher than the risk it carries" is a stronger answer than a rule quoted from a style guide.

Memory and Ownership: Explaining ARC Without Reciting It

The first question is "what is ARC?" The follow-up is "where has this bitten you, or someone near you?"

Prepare one small, true story. Keep it short and specific. A retain cycle between two objects that both held strong references to each other, discovered because something never went away. Or an unexpected lifetime where a closure captured an object and kept it alive longer than anyone expected.

Describe the symptom before the cause, the way you would in a real debugging conversation. Something stopped being deallocated. Memory grew. You looked at who was holding a strong reference. Then you found the cycle and broke it with a weak reference. That order matters, because it shows how you actually work rather than what you read.

If you do not have a story, say so plainly and reason from first principles instead. "I haven't hit this in production, but I'd expect it when two objects reference each other strongly, and I'd look for that first." Inventing a story you cannot defend under two more questions is far worse than an honest gap.

Concurrency Follow-Ups: From 'What Is an Actor' to 'What Would You Change?'

Concurrency questions tend to move quickly from definitions into design. You may well hear "how would you structure this feature?" within a minute or two.

Use the same three beats, spoken:

"I'd keep the view-facing state on the main actor and move the parsing off it. The cost is that the boundary between them has to be crossed carefully, which adds coordination and makes some bugs harder to reproduce. If the work turned out to be trivial, I'd drop the extra isolation rather than pay for it."

Three things worth naming out loud:

  • Isolation boundaries. Where does the data live, and who is allowed to touch it?
  • What stays on the main actor. State that drives the interface must be updated on the main actor, and anything cheap enough that moving it is not worth the complexity can stay there too.
  • What you would move off it. Real work — parsing, encoding, file or network handling.

Then close with the condition that would make you reconsider. That closing sentence shows you are choosing rather than following a habit, and it gives the interviewer a clear place to take the conversation next.

When You Do Not Know: Honest Recovery in a Swift Technical Interview

You will get a question you cannot answer. Everyone does. What matters is the next ten seconds.

Use three moves:

  1. Say what you do know. "I know property wrappers let you attach behaviour to a property, but I haven't written a custom one myself."
  2. Say what you are unsure about. "I'm not confident about the order in which the wrapper's methods get called, or how the projected value is exposed."
  3. Say how you would find out. "I'd read the property wrapper section of the Swift book and write a small wrapper with a print statement to see the order things happen in."

The same shape works for concurrency gaps. "I know actors protect their own state, but I haven't reasoned much about what happens when two actors call into each other — I'd want to check how suspension points and reentrancy affect that before I claimed it was safe." Naming the specific uncertainty is what makes the recovery credible.

Avoid bluffing. It tends to cost more than the gap would have, and it leaves you defending a position you did not build. "I would read the documentation and write a small test" is a complete, respectable answer — it describes what you would actually do on the job.

Practise the recovery sentence out loud so it does not come out sounding like a defence mechanism. Calm and matter-of-fact is the target.

Practising Follow-Ups Out Loud Before the Real Thing

Reading about this will not change how you perform. Saying it will.

A simple drill:

  1. Pick a Swift concept — struct versus class, optional unwrapping, ARC and retain cycles, or actor isolation.
  2. Answer the first question once, in one or two sentences.
  3. Immediately ask yourself the follow-up, out loud, and answer it with claim, cost, condition.
  4. Record it and listen back. You are listening for filler, hedging, and the moment you stopped short of naming a cost.

If you can, get a study partner or a practice tool to ask the second question. The point of a partner or a tool is that you cannot skip the follow-up when something else is holding the conversation. If you have neither, record yourself asking the second question and answer the recording so you cannot skip it either. Keep a short list of the concepts where your follow-up answer is weak, and revisit only those.

A Short Pre-Interview Routine for Swift Candidates

In one sitting, before the interview:

  • Pick five Swift concepts and run the claim, cost, condition pattern on each, out loud.
  • Write down the one honest story you will use for memory or concurrency, and trim it to sixty seconds.
  • Decide in advance how you will say "I do not know", so it arrives calmly rather than as a scramble.
  • Say your three weakest follow-up answers one more time, then stop.

If you want a broader survey of how concept questions and trade-offs fit together across languages, Python Interview Questions: Concepts and Trade-Offs covers similar ground from a different angle. For related practice frameworks, see our blog, and if you want to check how a topic is described, our documentation is the place to look.

The takeaway: prepare positions, not paragraphs. A position you can defend, qualify and revise under pressure is what a Swift technical interview is actually testing, and it is something you can rehearse today with nothing more than a timer and your own voice.

Frequently asked questions

How do I answer a Swift follow-up question if I only memorised the definition?

Start from the definition you have, then add the two beats you did not memorise: the cost of the choice and the condition under which you would change it. "I'd use a struct here; the cost is copying for large payloads, and I'd switch to a class if identity mattered" turns recall into a position the interviewer can push against.

What should I say when I genuinely do not know a Swift concept in an interview?

Name the nearest thing you do know, name the specific gap, then name your next step. "I know property wrappers attach behaviour to a property but I haven't written a custom one; I'd read that section and write a small wrapper to watch the order of calls" is a finished answer.

How long should a Swift interview answer be before the interviewer moves on?

Aim for roughly twenty to thirty seconds per answer: one sentence for the claim, one for the cost, one for the condition. If you are still talking after that, you are probably repeating yourself or hedging, and the interviewer will either step in or wait you out.

Should I mention Swift version differences in my answers?

Only when the version changes the decision. For example: "if an async API needed a newer minimum OS than the app supported, I'd use the completion-handler version instead." One clause, then move on. A version aside that does not alter the choice just lengthens the answer, and naming a specific number you are not sure of is a risk with no upside.

How can I practise follow-up questions without a study partner?

Record yourself asking the second question, then answer the recording out loud with claim, cost, condition. The recording holds the conversation so you cannot skip the follow-up, and listening back shows you the exact sentence where you stopped short of naming a cost.

Read more practice frameworks on our blog before your next interview.