Bird
Raised Fist0
Swiftprogramming~10 mins

Nested functions in Swift - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Nested functions
Start Outer Function
↓
Define Inner Function
↓
Call Inner Function
↓
Inner Function Executes
↓
Return from Inner Function
↓
Return from Outer Function
The outer function starts, defines an inner function, calls it, then returns its result.
Execution Sample
Swift
func outer() -> Int {
  func inner() -> Int {
    return 5
  }
  return inner()
}

let result = outer()
Defines an outer function with an inner function that returns 5, then calls inner and returns its value.
Execution Table
StepActionEvaluationResult
1Call outer()Start outer functionouter function active
2Define inner()Inner function created inside outerinner function ready
3Call inner() inside outerExecute inner function bodyreturns 5
4outer() returns inner() resultReturn 5 from outerouter() returns 5
5Assign result = outer()result gets outer() returnresult = 5
💡 outer() completes and returns 5, assigned to result
Variable Tracker
VariableStartAfter outer callAfter inner callFinal
resultundefinedundefinedundefined5
Key Moments - 2 Insights
Why can inner() be called inside outer() but not outside?
Because inner() is defined inside outer(), it only exists during outer() execution (see execution_table step 3). Outside, inner() is not visible.
Does inner() run when outer() is called?
Yes, inner() runs only when outer() calls it (execution_table step 3). Defining inner() alone does not run it.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the value returned by inner() at step 3?
Aouter function
Bundefined
C5
D0
💡 Hint
Check the 'Result' column at step 3 in the execution_table.
At which step does the variable 'result' get its final value?
AStep 2
BStep 5
CStep 3
DStep 1
💡 Hint
Look at the variable_tracker table for 'result' final value assignment.
If inner() was not called inside outer(), what would outer() return?
ANothing (error or no return)
B5
Cinner function itself
D0
💡 Hint
Refer to execution_table step 3 and 4 where inner() is called and its return is used.
Concept Snapshot
Nested functions in Swift:
- Define a function inside another function.
- Inner function only visible inside outer function.
- Outer function can call inner function.
- Useful for organizing code and encapsulation.
- Syntax: func outer() { func inner() { } ... }
Full Transcript
This example shows how nested functions work in Swift. The outer function defines an inner function inside it. When outer() is called, it creates inner(), then calls inner() which returns 5. Outer then returns that value. The inner function cannot be called outside outer. Variables like 'result' get assigned after outer returns. This helps organize code by grouping related functions together.

Practice

(1/5)
1. What is a nested function in Swift?
easy
A. A function that calls itself
B. A function that returns another function
C. A function defined inside another function
D. A function defined outside any class or struct

Solution

  1. Step 1: Understand the definition of nested functions

    Nested functions are functions written inside other functions to organize code better.
  2. Step 2: Match the definition to the options

    A function defined inside another function correctly describes a function inside another function, which is the definition of nested functions.
  3. Final Answer:

    A function defined inside another function -> Option C
  4. Quick Check:

    Nested function = function inside function [OK]
Hint: Nested means inside another function [OK]
Common Mistakes:
  • Confusing nested with recursive functions
  • Thinking nested functions are global
  • Mixing nested with returning functions
2. Which of the following is the correct syntax to define a nested function in Swift?
easy
A. func outer() { func inner() { } }
B. func outer() { func inner; }
C. func outer() { inner func() { } }
D. func outer() { func inner() }

Solution

  1. Step 1: Review Swift function syntax

    Functions are defined with 'func name() { }'. Nested functions follow the same syntax inside another function.
  2. Step 2: Check each option for correct syntax

    func outer() { func inner() { } } uses correct syntax with braces for both outer and inner functions. Others have missing braces or wrong order.
  3. Final Answer:

    func outer() { func inner() { } } -> Option A
  4. Quick Check:

    Nested function syntax = func inside func with braces [OK]
Hint: Look for 'func' with braces inside another function [OK]
Common Mistakes:
  • Omitting braces for inner function
  • Using semicolon instead of braces
  • Placing 'func' keyword incorrectly
3. What will be the output of the following Swift code?
func greet() {
    func sayHello() {
        print("Hello")
    }
    sayHello()
}
greet()
medium
A. Hello
B. No output
C. Error: sayHello not found
D. HelloHello

Solution

  1. Step 1: Understand function calls inside nested functions

    The outer function 'greet' defines 'sayHello' inside it and calls it once.
  2. Step 2: Trace the execution

    Calling 'greet()' runs 'sayHello()', which prints "Hello" once.
  3. Final Answer:

    Hello -> Option A
  4. Quick Check:

    Nested call prints once = Hello [OK]
Hint: Inner function called once inside outer function [OK]
Common Mistakes:
  • Thinking inner function runs twice
  • Assuming inner function is global
  • Expecting no output because inner function is nested
4. Identify the error in this Swift code using nested functions:
func calculate() {
    innerFunc() 
    func innerFunc() {
        print("Inside inner")
    }
}
calculate()
medium
A. No error, code runs fine
B. Missing return type for innerFunc
C. innerFunc cannot be nested inside calculate
D. innerFunc() called before its definition causes error

Solution

  1. Step 1: Analyze function call order

    The code calls 'innerFunc()' before it is defined inside 'calculate()'. Swift requires functions to be defined before use.
  2. Step 2: Understand Swift's function declaration rules

    Calling a nested function before its declaration causes a compile-time error.
  3. Final Answer:

    innerFunc() called before its definition causes error -> Option D
  4. Quick Check:

    Call before definition = error [OK]
Hint: Define nested functions before calling them [OK]
Common Mistakes:
  • Assuming nested functions can be called before definition
  • Thinking missing return type causes error here
  • Believing nested functions can't be defined inside
5. How can you use nested functions to create a function that returns another function which adds a fixed number to its input? Choose the correct Swift code.
hard
A. func makeAdder(_ x: Int) -> Int { func adder(y: Int) -> Int { return x + y } return adder(5) }
B. func makeAdder(_ x: Int) -> (Int) -> Int { func adder(y: Int) -> Int { return x + y } return adder }
C. func makeAdder(_ x: Int) -> (Int) -> Int { return func(y: Int) -> Int { x + y } }
D. func makeAdder(_ x: Int) -> (Int) -> Int { func adder(y: Int) -> Int { return y } return adder }

Solution

  1. Step 1: Understand the goal

    We want a function that returns another function adding a fixed number 'x' to input 'y'.
  2. Step 2: Check each option's logic

    func makeAdder(_ x: Int) -> (Int) -> Int { func adder(y: Int) -> Int { return x + y } return adder } defines nested 'adder' using 'x' and returns it correctly. func makeAdder(_ x: Int) -> Int { func adder(y: Int) -> Int { return x + y } return adder(5) } returns a value, not a function. func makeAdder(_ x: Int) -> (Int) -> Int { return func(y: Int) -> Int { x + y } } has invalid syntax. func makeAdder(_ x: Int) -> (Int) -> Int { func adder(y: Int) -> Int { return y } return adder } returns a function ignoring 'x'.
  3. Final Answer:

    func makeAdder(_ x: Int) -> (Int) -> Int { func adder(y: Int) -> Int { return x + y } return adder } -> Option B
  4. Quick Check:

    Nested function returns function adding x = func makeAdder(_ x: Int) -> (Int) -> Int { func adder(y: Int) -> Int { return x + y } return adder } [OK]
Hint: Return nested function that uses outer parameter [OK]
Common Mistakes:
  • Returning a value instead of a function
  • Incorrect nested function syntax
  • Ignoring outer function parameter inside nested function
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard