Trailing closure syntax makes your code cleaner and easier to read when you pass a closure as the last argument to a function.
Trailing closure syntax in Swift
Introduction
Syntax
Swift
functionName(parameters) { closure code }You can omit the parentheses if the closure is the only argument.
This syntax works only if the closure is the last argument in the function call.
Examples
Swift
func greet(name: String, action: () -> Void) { print("Hello, \(name)!") action() } greet(name: "Anna", action: { print("Welcome!") })
Swift
greet(name: "Anna") { print("Welcome!") }
Swift
let numbers = [1, 2, 3] numbers.forEach { number in print(number * 2) }
Sample Program
This program shows how trailing closure syntax works by passing a closure after the function call parentheses.
Swift
func performTask(completion: () -> Void) { print("Task started") completion() print("Task finished") } performTask { print("This is the trailing closure running.") }
Important Notes
If the closure is the only argument, you can leave out the parentheses entirely.
Trailing closures improve readability especially when the closure code is long.
Summary
Trailing closure syntax lets you write the last closure argument outside the parentheses.
It makes your Swift code cleaner and easier to read.
Practice
1. What does trailing closure syntax allow you to do in Swift?
func perform(action: () -> Void) { action() }easy
Solution
Step 1: Understand closure arguments in Swift functions
Swift functions can take closures as arguments, usually inside parentheses.Step 2: Identify trailing closure syntax purpose
Trailing closure syntax lets you write the last closure argument outside the parentheses for cleaner code.Final Answer:
Write the last closure argument outside the parentheses -> Option AQuick Check:
Trailing closure syntax = last closure outside parentheses [OK]
Hint: Last closure can go outside parentheses for clarity [OK]
Common Mistakes:
- Thinking closures must always be inside parentheses
- Confusing trailing closures with named functions
- Believing trailing closures remove closures entirely
2. Which of the following is the correct way to use trailing closure syntax in Swift?
func greet(action: () -> Void) { action() }easy
Solution
Step 1: Recall trailing closure syntax format
Trailing closure syntax allows calling a function with a closure outside parentheses if it's the last argument.Step 2: Check each option
greet { print("Hello") } correctly calls greet with closure outside parentheses: greet { print("Hello") }.Final Answer:
greet { print("Hello") } -> Option BQuick Check:
Trailing closure syntax = function { closure } [OK]
Hint: Use braces after function name without parentheses for trailing closure [OK]
Common Mistakes:
- Adding empty parentheses before trailing closure
- Trying to call closure immediately with () after braces
- Passing closure as a normal argument inside parentheses
3. What is the output of this Swift code?
func repeatTask(times: Int, task: () -> Void) {
for _ in 1...times { task() }
}
repeatTask(times: 3) {
print("Hi")
}medium
Solution
Step 1: Understand repeatTask function behavior
The function calls the closure 'task' the number of times specified by 'times'. Here, times = 3.Step 2: Analyze the closure call
The closure prints "Hi" each time. So it prints "Hi" three times, each on a new line because print adds a newline.Final Answer:
Hi Hi Hi -> Option AQuick Check:
3 prints of "Hi" each on new line = Hi Hi Hi [OK]
Hint: print adds newline, so repeated prints appear on separate lines [OK]
Common Mistakes:
- Assuming prints appear on same line without newline
- Thinking trailing closure causes syntax error
- Confusing number of repetitions
4. Identify the error in this Swift code using trailing closure syntax:
func calculate(operation: (Int, Int) -> Int) {
let result = operation(5, 3)
print(result)
}
calculate() { (a, b) in
a + b
}medium
Solution
Step 1: Check function call syntax with trailing closure
When using trailing closure syntax, do not include empty parentheses before the closure.Step 2: Identify the error in code
The code calls calculate() with empty parentheses and then a trailing closure, which is incorrect syntax.Final Answer:
Extra parentheses after calculate() when using trailing closure -> Option DQuick Check:
Trailing closure means no parentheses if no other arguments [OK]
Hint: Remove empty parentheses when using trailing closure [OK]
Common Mistakes:
- Including empty parentheses before trailing closure
- Adding unnecessary return in single-expression closure
- Thinking trailing closure can't have parameters
5. Given this Swift function:
How would you call
func fetchData(completion: (String) -> Void) {
let data = "User info"
completion(data)
}How would you call
fetchData using trailing closure syntax to print the data received?hard
Solution
Step 1: Understand trailing closure syntax for single closure argument
When the last argument is a closure, you can write it outside parentheses without empty parentheses.Step 2: Check each option for correct syntax and usage
fetchData { data in print(data) } correctly calls fetchData with trailing closure and closure parameter 'data' used inside print.Final Answer:
fetchData { data in print(data) } -> Option CQuick Check:
Trailing closure with parameter = fetchData { data in print(data) } [OK]
Hint: Write closure after function name without parentheses for trailing closure [OK]
Common Mistakes:
- Including empty parentheses before trailing closure
- Omitting closure parameter when needed
- Trying to use closure inside parentheses and trailing closure simultaneously
Recommended
Ready to prove it?
Pass the test and this pattern moves unknown
10 questions ~5 mineasy hard
