Bird
Raised Fist0
Swiftprogramming~5 mins

Omitting argument labels with _ in Swift - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does using an underscore (_) before a function parameter in Swift do?
It tells Swift to omit the argument label when calling the function, so you only pass the value without naming the parameter.
Click to reveal answer
beginner
How do you define a Swift function that takes two integers without requiring argument labels when calling it?
Use underscores before both parameters like this:
func add(_ a: Int, _ b: Int) -> Int { return a + b }
Click to reveal answer
intermediate
Why might you want to omit argument labels in Swift functions?
To make function calls shorter and cleaner when the meaning is clear without labels, similar to how some built-in Swift functions work.
Click to reveal answer
beginner
What happens if you omit the underscore and call a Swift function without argument labels?
Swift will give a compile-time error because it expects argument labels by default unless you use an underscore to omit them.
Click to reveal answer
beginner
Example: How do you call this function?
func greet(_ name: String) { print("Hello, \(name)!") }
You call it without the argument label:
greet("Alice")

Not like greet(name: "Alice").
Click to reveal answer
What does the underscore (_) before a parameter name in a Swift function mean?
AThe argument label is omitted when calling the function
BThe parameter is optional
CThe parameter is a constant
DThe parameter is ignored inside the function
Given this function:
func multiply(_ x: Int, y: Int) -> Int { x * y }

How do you call it correctly?
Amultiply(3, y: 4)
Bmultiply(x: 3, y: 4)
Cmultiply(3, 4)
Dmultiply(x: 3, 4)
What error will you get if you call a function with argument labels omitted but the function requires them?
ARuntime error
BCompile-time error
CNo error, it works fine
DWarning only
Why might you NOT want to omit argument labels in Swift functions?
ATo reduce memory usage
BTo make the code run faster
CTo improve code readability and clarity
DTo avoid syntax errors
How do you define a function with no argument labels for all parameters?
AUse default values
BOmit parameter names entirely
CUse optional parameters
DUse _ before each parameter name
Explain how to omit argument labels in Swift functions and why you might want to do it.
Think about how you write function calls without labels.
You got /4 concepts.
    Describe what happens if you call a Swift function without argument labels when the function expects them.
    Consider Swift's strictness about argument labels.
    You got /3 concepts.

      Practice

      (1/5)
      1. What does the underscore _ do when used before a function parameter in Swift?
      easy
      A. It changes the parameter type to Any.
      B. It makes the parameter optional.
      C. It makes the parameter a constant inside the function.
      D. It allows you to call the function without writing the argument label.

      Solution

      1. Step 1: Understand the role of underscore in parameters

        The underscore before a parameter name tells Swift to omit the argument label when calling the function.
      2. Step 2: Effect on function call

        This means you can pass the argument directly without naming it, making the call shorter and simpler.
      3. Final Answer:

        It allows you to call the function without writing the argument label. -> Option D
      4. Quick Check:

        Underscore = omit argument label [OK]
      Hint: Underscore means skip argument label when calling [OK]
      Common Mistakes:
      • Thinking underscore makes parameter optional
      • Confusing underscore with type changes
      • Assuming underscore affects parameter mutability
      2. Which of the following function declarations correctly omits the argument label for the first parameter?
      easy
      A. func greet(_name: String) { print("Hello, \(_name)!") }
      B. func greet(_ name: String) { print("Hello, \(name)!") }
      C. func greet(name _ : String) { print("Hello, \(name)!") }
      D. func greet(name: String) { print("Hello, \(name)!") }

      Solution

      1. Step 1: Identify correct underscore usage

        The underscore must appear before the parameter name with a space, like _ name: String.
      2. Step 2: Check each option

        func greet(_ name: String) { print("Hello, \(name)!") } uses _ name: String correctly. func greet(name: String) { print("Hello, \(name)!") } uses a label. func greet(name _ : String) { print("Hello, \(name)!") } has wrong syntax. func greet(_name: String) { print("Hello, \(_name)!") } uses an invalid parameter name.
      3. Final Answer:

        func greet(_ name: String) { print("Hello, \(name)!") } -> Option B
      4. Quick Check:

        Correct underscore syntax = func greet(_ name: String) { print("Hello, \(name)!") } [OK]
      Hint: Underscore must be alone before parameter name [OK]
      Common Mistakes:
      • Putting underscore after parameter name
      • Adding spaces between underscore and name incorrectly
      • Using underscore as part of parameter name
      3. What is the output of this Swift code?
      func multiply(_ a: Int, _ b: Int) -> Int {
          return a * b
      }
      
      print(multiply(3, 4))
      medium
      A. 12
      B. multiply(3, 4)
      C. Error: Missing argument labels
      D. 7

      Solution

      1. Step 1: Understand function parameters with underscore

        Both parameters have underscores, so argument labels are omitted when calling.
      2. Step 2: Calculate the function result

        Calling multiply(3, 4) returns 3 * 4 = 12, which is printed.
      3. Final Answer:

        12 -> Option A
      4. Quick Check:

        3 * 4 = 12 [OK]
      Hint: Underscore means call without labels, so multiply(3,4) works [OK]
      Common Mistakes:
      • Expecting argument labels in call
      • Confusing output with string of function call
      • Adding parameters incorrectly
      4. Identify the error in this Swift function call:
      func divide(_ numerator: Double, denominator: Double) -> Double {
          return numerator / denominator
      }
      
      divide(10, denominator: 2)
      medium
      A. Cannot mix omitted and required labels in parameters
      B. Missing argument label for denominator
      C. No error, code runs fine
      D. Missing argument label for numerator

      Solution

      1. Step 1: Analyze parameter labels

        The first parameter uses underscore, so no label needed. The second requires label denominator.
      2. Step 2: Check function call

        The call uses divide(10, denominator: 2), which matches the parameter labels correctly.
      3. Final Answer:

        No error, code runs fine -> Option C
      4. Quick Check:

        Underscore omits first label, second label required [OK]
      Hint: First param no label, second param label required [OK]
      Common Mistakes:
      • Expecting both labels omitted
      • Trying to omit second label incorrectly
      • Confusing parameter order
      5. You want to write a Swift function formatDate that takes a Date and a String format. You want to call it like formatDate(myDate, "yyyy-MM-dd") without argument labels. Which function declaration is correct?
      hard
      A. func formatDate(_ date: Date, _ format: String) -> String { /* implementation */ }
      B. func formatDate(date: Date, format: String) -> String { /* implementation */ }
      C. func formatDate(_ date: Date, format: String) -> String { /* implementation */ }
      D. func formatDate(date: Date, _ format: String) -> String { /* implementation */ }

      Solution

      1. Step 1: Understand call without labels

        Calling formatDate(myDate, "yyyy-MM-dd") means both parameters must omit labels.
      2. Step 2: Match function declaration

        Only func formatDate(_ date: Date, _ format: String) -> String { /* implementation */ } uses underscore for both parameters, allowing call without labels.
      3. Final Answer:

        func formatDate(_ date: Date, _ format: String) -> String { /* implementation */ } -> Option A
      4. Quick Check:

        Both params underscore = no labels in call [OK]
      Hint: Use underscore for all params to omit all labels [OK]
      Common Mistakes:
      • Omitting only one label but calling without both
      • Mixing labeled and unlabeled parameters incorrectly
      • Forgetting underscore 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