Bird
Raised Fist0
iOS Swiftmobile~10 mins

Functions and closures in iOS 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 define a simple function that prints a greeting.

iOS Swift
func greet() {
  print([1])
}
Drag options to blanks, or click blank then click option'
A"Hello, world!"
BHello, world!
Cprint("Hello")
Dgreet()
Attempts:
3 left
💡 Hint
Common Mistakes
Forgetting the double quotes around the string.
Trying to call print inside print.
2fill in blank
medium

Complete the code to declare a closure that adds two integers.

iOS Swift
let add: (Int, Int) -> Int = [1]
Drag options to blanks, or click blank then click option'
A{ a, b in a - b }
B(a, b) -> a + b
Cfunc(a, b) { a + b }
D{ (a: Int, b: Int) in return a + b }
Attempts:
3 left
💡 Hint
Common Mistakes
Using incorrect closure syntax without 'in'.
Using subtraction instead of addition.
3fill in blank
hard

Fix the error in the function that returns a closure capturing a variable.

iOS Swift
func makeIncrementer() -> () -> Int {
  var count = 0
  return [1] {
    count += 1
    return count
  }
}
Drag options to blanks, or click blank then click option'
Aclosure()
Bfunc()
C{
D-> Int in
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'func()' instead of '{' to start the closure.
Adding extra keywords inside the return statement.
4fill in blank
hard

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

iOS Swift
let numbers = [1, 2, 3, 4, 5]
let evens = numbers.filter { [1] in [2] % 2 == 0 }
Drag options to blanks, or click blank then click option'
Anumber
Bnum
Attempts:
3 left
💡 Hint
Common Mistakes
Using different names before 'in' and inside the closure.
Using undefined variable names.
5fill in blank
hard

Fill all three blanks to create a dictionary comprehension filtering values greater than zero.

iOS Swift
let data = ["a": 1, "b": -1, "c": 3]
let filtered = data.filter { [1], [2] in [3] > 0 }
Drag options to blanks, or click blank then click option'
Akey
Bvalue
Cval
Dk
Attempts:
3 left
💡 Hint
Common Mistakes
Using inconsistent parameter names.
Checking the key instead of the value.

Practice

(1/5)
1. What is a closure in Swift?
func greet() { print("Hello") }
easy
A. An unnamed block of code that can be stored and passed around
B. A named function that cannot be reused
C. A variable that holds a number
D. A type of loop

Solution

  1. Step 1: Understand closure definition

    A closure is a block of code without a name that can be saved and used later.
  2. Step 2: Compare with function

    Functions have names, closures do not but both can be reused.
  3. Final Answer:

    An unnamed block of code that can be stored and passed around -> Option A
  4. Quick Check:

    Closure = unnamed reusable code block [OK]
Hint: Closures are like functions without names [OK]
Common Mistakes:
  • Confusing closures with variables
  • Thinking closures must have names
  • Mixing closures with loops
2. Which of the following is the correct syntax to declare a closure that takes no parameters and returns an Int?
easy
A. let closure = (Int) -> { return 5 }
B. let closure = { () -> Int in return 5 }
C. let closure = func() -> Int { return 5 }
D. func closure() -> Int { return 5 }

Solution

  1. Step 1: Identify closure syntax

    Closures use curly braces with parameters and return type before 'in'.
  2. Step 2: Check each option

    'let closure = { () -> Int in return 5 }' matches closure syntax. 'func closure() -> Int { return 5 }' declares a named function. 'let closure = func() -> Int { return 5 }' uses invalid syntax. 'let closure = (Int) -> { return 5 }' lacks 'in' keyword and has wrong parameter placement.
  3. Final Answer:

    let closure = { () -> Int in return 5 } -> Option B
  4. Quick Check:

    Closure syntax = curly braces + 'in' [OK]
Hint: Closures use braces and 'in' keyword [OK]
Common Mistakes:
  • Using func keyword inside closure
  • Missing 'in' keyword
  • Wrong parameter syntax
3. What will be printed by this Swift code?
let multiply = { (a: Int, b: Int) -> Int in
  return a * b
}
print(multiply(3, 4))
medium
A. 34
B. 7
C. 12
D. Error

Solution

  1. Step 1: Understand closure parameters and return

    The closure takes two Ints and returns their product.
  2. Step 2: Calculate multiply(3, 4)

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

    12 -> Option C
  4. Quick Check:

    3 times 4 = 12 [OK]
Hint: Closures return calculated values like functions [OK]
Common Mistakes:
  • Adding instead of multiplying
  • Concatenating numbers as strings
  • Syntax errors in closure call
4. Identify the error in this closure declaration:
let add = { (a: Int, b: Int) Int in
  return a + b
}
medium
A. Missing '->' before return type
B. Missing 'in' keyword
C. Parameters should not have types
D. Closure cannot return Int

Solution

  1. Step 1: Check closure signature syntax

    Return type must be preceded by '->' in closure signature.
  2. Step 2: Identify missing arrow

    Code has '(a: Int, b: Int) Int' but should be '(a: Int, b: Int) -> Int'.
  3. Final Answer:

    Missing '->' before return type -> Option A
  4. Quick Check:

    Closure return type needs '->' [OK]
Hint: Return type needs '->' before it in closures [OK]
Common Mistakes:
  • Omitting '->' in closure signature
  • Placing 'in' incorrectly
  • Removing parameter types
5. You want to sort an array of names alphabetically using a closure. Which code correctly uses a closure with the sorted(by:) method?
hard
A. let sortedNames = names.sorted(by: { s1, s2 -> Bool { return s1 > s2 } })
B. let sortedNames = names.sorted(by: { s1, s2 in s1 + s2 })
C. let sortedNames = names.sorted(by: (s1, s2) -> s1 < s2)
D. let sortedNames = names.sorted(by: { s1, s2 in s1 < s2 })

Solution

  1. Step 1: Understand sorted(by:) closure

    It expects a closure that returns true if first element should come before second.
  2. Step 2: Check each option

    'let sortedNames = names.sorted(by: { s1, s2 in s1 < s2 })' returns true when s1 < s2 (correct for ascending alphabetical order). The version with s1 > s2 sorts descending. The version with (s1, s2) -> s1 < s2 uses invalid syntax without braces or 'in'. The version with s1 + s2 returns String, not Bool.
  3. Final Answer:

    let sortedNames = names.sorted(by: { s1, s2 in s1 < s2 }) -> Option D
  4. Quick Check:

    sorted(by:) needs Bool-returning closure [OK]
Hint: sorted(by:) needs closure returning true/false [OK]
Common Mistakes:
  • Returning wrong type from closure
  • Using wrong comparison operator
  • Incorrect closure syntax
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