📖 Scenario: Imagine you are organizing a small event and want to assign different tasks to helpers. You want to keep track of these tasks and be able to pass them around easily to different people.
🎯 Goal: You will create simple functions representing tasks, store them in a list, and then call them one by one. This will show how functions in Swift can be treated like any other value.
📋 What You'll Learn
Create functions that print simple task messages
Store these functions in an array
Call each function from the array
Print the output of each function call
💡 Why This Matters
🌍 Real World
In real apps, you often pass functions as callbacks or handlers to respond to user actions or events.
💼 Career
Understanding first-class functions is key for Swift developers to write clean, modular, and reusable code.
Progress0 / 4 steps
1
Create simple task functions
Create two functions called taskOne and taskTwo. Each function should print a message: "Task One is done" and "Task Two is done" respectively.
Swift
Hint
Define each function with func keyword and use print inside the function body.
2
Store functions in an array
Create a variable called tasks and assign it an array containing the two functions taskOne and taskTwo.
Swift
Hint
Use square brackets [] to create an array and list the function names without parentheses.
3
Call each function from the array
Use a for loop with variable task to iterate over tasks and call each function inside the loop.
Swift
Hint
Inside the loop, call the function by adding parentheses () after the variable task.
4
Print the final output
Run the program to print the messages from both tasks. The output should show Task One is done and Task Two is done on separate lines.
Swift
Hint
Just run the program. The print statements inside the functions will show the messages.
Practice
(1/5)
1. Why are functions considered first-class citizens in Swift?
easy
A. Because functions can be assigned to variables and passed as arguments
B. Because functions cannot return values
C. Because functions must always be declared globally
D. Because functions cannot be nested inside other functions
Solution
Step 1: Understand what first-class means in Swift
First-class means functions can be treated like any other value, such as assigned to variables or passed around.
Step 2: Identify the correct property of functions in Swift
Swift allows functions to be stored in variables and passed as arguments, which matches the definition of first-class citizens.
Final Answer:
Because functions can be assigned to variables and passed as arguments -> Option A
Quick Check:
Functions as values = Because functions can be assigned to variables and passed as arguments [OK]
Hint: Remember: first-class means functions act like normal values [OK]
Common Mistakes:
Thinking functions cannot be passed as arguments
Believing functions must be global only
Assuming functions cannot return values
2. Which of the following is the correct way to assign a function to a variable in Swift?
easy
A. let greet = func sayHello() { print("Hello") }
B. let greet = sayHello
C. func greet = sayHello()
D. var greet: sayHello = func()
Solution
Step 1: Recall Swift syntax for assigning functions
In Swift, you assign a function by its name without parentheses to a variable or constant.
Step 2: Check each option for correct syntax
let greet = sayHello correctly assigns the function name without calling it. Other options have syntax errors or misuse keywords.
Final Answer:
let greet = sayHello -> Option B
Quick Check:
Assign function by name without () = let greet = sayHello [OK]
Hint: Assign function by name only, no parentheses [OK]
Common Mistakes:
Adding parentheses when assigning function
Using 'func' keyword in assignment
Incorrect variable declaration syntax
3. What will be the output of this Swift code?
func multiplyByTwo(_ number: Int) -> Int {
return number * 2
}
let operation = multiplyByTwo
print(operation(5))
medium
A. 5
B. multiplyByTwo
C. 10
D. Error: Cannot assign function to variable
Solution
Step 1: Understand function assignment and call
The function multiplyByTwo is assigned to 'operation' without calling it, so 'operation' is a function reference.
Hint: Calling assigned function runs original logic [OK]
Common Mistakes:
Expecting variable to hold result, not function
Confusing function name with string output
Thinking assignment causes error
4. Identify the error in this Swift code snippet:
func add(_ a: Int, _ b: Int) -> Int {
return a + b
}
let sum = add(3, 4)
let operation = add(3, 4)
print(operation(5, 6))
medium
A. Function add is not defined properly
B. Missing return statement in add function
C. Cannot assign function call to a constant
D. Cannot call operation as a function because it holds an Int, not a function
Solution
Step 1: Analyze variable assignments
sum is assigned the result of add(3, 4), which is an Int (7). operation is also assigned add(3, 4), so operation is an Int, not a function.
Step 2: Check the call to operation(5, 6)
Since operation is an Int, calling operation(5, 6) causes an error because Int is not callable.
Final Answer:
Cannot call operation as a function because it holds an Int, not a function -> Option D
Quick Check:
Calling Int as function causes error = Cannot call operation as a function because it holds an Int, not a function [OK]
Hint: Assign function name, not function call, to variable [OK]
Common Mistakes:
Assigning function call instead of function reference
Expecting function call to be callable again
Ignoring type mismatch errors
5. How can you write a Swift function that returns another function which adds a fixed number to its input? For example, calling makeAdder(3)(5) should return 8.
hard
A. func makeAdder(_ x: Int) -> (Int) -> Int {
return { y in x + y }
}
B. func makeAdder(_ x: Int) -> Int {
return x + y
}
C. func makeAdder(x: Int, y: Int) -> Int {
return x + y
}
D. func makeAdder(_ x: Int) -> (Int) {
return x
}
Solution
Step 1: Understand the requirement for returning a function
The function makeAdder must return another function that takes an Int and adds it to x.
Step 2: Check which option returns a function type
func makeAdder(_ x: Int) -> (Int) -> Int {
return { y in x + y }
} returns a closure (function) of type (Int) -> Int that adds x and y, matching the requirement.
Final Answer:
func makeAdder(_ x: Int) -> (Int) -> Int {
return { y in x + y }
} -> Option A
Quick Check:
Return function adding x to input = func makeAdder(_ x: Int) -> (Int) -> Int {
return { y in x + y }
} [OK]
Hint: Return a closure capturing x to add later [OK]
Common Mistakes:
Returning Int instead of function
Not using closure syntax for returned function
Incorrect function signature
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.