Bird
Raised Fist0
Swiftprogramming~10 mins

Closure expression syntax in Swift - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to create a closure that adds two numbers.

Swift
let add = { (a: Int, b: Int) -> Int in return a [1] b }
Drag options to blanks, or click blank then click option'
A/
B-
C*
D+
Attempts:
3 left
💡 Hint
Common Mistakes
Using '-' instead of '+' will subtract instead of add.
2fill in blank
medium

Complete the code to call the closure with arguments 3 and 5.

Swift
let result = add([1], 5)
Drag options to blanks, or click blank then click option'
A4
B3
C5
D6
Attempts:
3 left
💡 Hint
Common Mistakes
Passing 4 or 6 instead of 3 will change the result.
3fill in blank
hard

Fix the error in the closure syntax to correctly multiply two numbers.

Swift
let multiply = { (a: Int, b: Int) -> Int [1] a * b }
Drag options to blanks, or click blank then click option'
Afunc
B->
Cin
Dreturn
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'return' or 'func' instead of 'in' causes syntax errors.
4fill in blank
hard

Fill both blanks to create a closure that returns the square of a number.

Swift
let square = { (num: Int) [1] num [2] num }
Drag options to blanks, or click blank then click option'
Ain
B**
C*
Dreturn
Attempts:
3 left
💡 Hint
Common Mistakes
Using '**' for exponentiation is not valid in Swift.
5fill in blank
hard

Fill all three blanks to create a closure that filters even numbers from an array.

Swift
let evens = numbers.filter { [1] in [2] % 2 [3] 0 }
Drag options to blanks, or click blank then click option'
Anum
C==
D!=
Attempts:
3 left
💡 Hint
Common Mistakes
Using '!=' instead of '==' will filter odd numbers instead.

Practice

(1/5)
1. What is a closure in Swift?
easy
A. A special kind of loop for repeating tasks
B. A block of code that can be passed around and executed later
C. A type of variable that stores numbers only
D. A keyword used to declare functions

Solution

  1. Step 1: Understand the definition of closure

    A closure is a block of code that can be saved and run later, similar to a function but more flexible.
  2. Step 2: Compare options with closure meaning

    Only 'A block of code that can be passed around and executed later' correctly describes a closure.
  3. Final Answer:

    A block of code that can be passed around and executed later -> Option B
  4. Quick Check:

    Closure = block of code passed and run later [OK]
Hint: Closures are like saved code blocks you run later [OK]
Common Mistakes:
  • Confusing closures with variables
  • Thinking closures are loops
  • Mixing closures with function keywords
2. Which of the following is the correct syntax for a closure that takes two Ints and returns their sum?
easy
A. { a, b in a + b }
B. { (a, b) -> Int { a + b } }
C. func sum(a: Int, b: Int) -> Int { return a + b }
D. { (a: Int, b: Int) -> Int in return a + b }

Solution

  1. Step 1: Identify closure syntax components

    A closure with parameters and return type uses parentheses for parameters, '->' for return type, and 'in' before the code.
  2. Step 2: Check each option

    { (a: Int, b: Int) -> Int in return a + b } correctly uses (a: Int, b: Int) -> Int in return a + b. { a, b in a + b } omits types and requires context for type inference to compile. func sum(a: Int, b: Int) -> Int { return a + b } is a function, not a closure. { (a, b) -> Int { a + b } } has wrong braces placement and misses 'in'.
  3. Final Answer:

    { (a: Int, b: Int) -> Int in return a + b } -> Option D
  4. Quick Check:

    Closure syntax = parameters, return type, in keyword [OK]
Hint: Closure syntax: parameters, arrow, return type, then 'in' [OK]
Common Mistakes:
  • Confusing functions with closures
  • Missing 'in' keyword
  • Incorrect braces placement
3. What is the output of this Swift code?
let multiply = { (x: Int, y: Int) -> Int in x * y }
print(multiply(3, 4))
medium
A. 12
B. 7
C. 34
D. Error

Solution

  1. Step 1: Understand closure definition and call

    The closure multiply takes two Ints and returns their product (x * y). It is called with 3 and 4.
  2. Step 2: Calculate the result

    3 * 4 = 12, so print outputs 12.
  3. Final Answer:

    12 -> Option A
  4. Quick Check:

    3 times 4 = 12 [OK]
Hint: Multiply inputs inside closure to get output [OK]
Common Mistakes:
  • Adding instead of multiplying
  • Concatenating numbers as strings
  • Syntax errors in closure call
4. Find the error in this closure syntax:
let greet = { name: String in
  print("Hello, \(name)!")
}
medium
A. Parameters must be in parentheses
B. Missing 'in' keyword after parameters
C. Closure cannot print inside its body
D. Missing parameter types in closure

Solution

  1. Step 1: Check closure parameter syntax

    Closure parameters must be enclosed in parentheses, like (name: String).
  2. Step 2: Identify the error in given code

    The code uses 'name: String' without parentheses, which is invalid syntax.
  3. Final Answer:

    Parameters must be in parentheses -> Option A
  4. Quick Check:

    Closure parameters need parentheses [OK]
Hint: Always put closure parameters inside parentheses [OK]
Common Mistakes:
  • Omitting parentheses around parameters
  • Forgetting 'in' keyword
  • Thinking closures can't print
5. How can you simplify this closure expression?
let numbers = [1, 2, 3, 4]
let doubled = numbers.map({ (num: Int) -> Int in return num * 2 })
print(doubled)
hard
A. Use a for loop instead of map
B. Remove 'return' and keep full syntax: numbers.map { (num: Int) -> Int in num * 2 }
C. Use shorthand argument names: numbers.map { $0 * 2 }
D. Cannot simplify closure expressions

Solution

  1. Step 1: Understand closure simplification rules

    Swift allows removing parameter types and 'return' when the closure is a single expression, and using shorthand $0 for first parameter.
  2. Step 2: Apply shorthand argument names

    Replacing full closure with numbers.map { $0 * 2 } simplifies code and is correct.
  3. Final Answer:

    Use shorthand argument names: numbers.map { $0 * 2 } -> Option C
  4. Quick Check:

    Shorthand $0 replaces explicit parameters [OK]
Hint: Use $0, $1 for closure parameters to shorten code [OK]
Common Mistakes:
  • Keeping full syntax unnecessarily
  • Thinking closures can't be simplified
  • Replacing map with loops unnecessarily
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