Bird
Raised Fist0
Swiftprogramming~5 mins

BuildOptional and buildEither in Swift - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is BuildOptional in Swift's result builders?

BuildOptional allows you to include optional parts in a result builder. It helps handle if statements without an else, letting you add code only when a condition is true.

Click to reveal answer
beginner
What does BuildEither do in Swift's result builders?

BuildEither handles if-else or switch statements inside result builders. It chooses between two code paths, building either the first or the second part depending on the condition.

Click to reveal answer
intermediate
How does BuildOptional relate to optional values in Swift?

BuildOptional wraps the optional part of the builder's content in an Optional type. If the optional part is missing, it returns nil, otherwise it returns the built content.

Click to reveal answer
intermediate
Explain the difference between buildEither(first:) and buildEither(second:).
<p><code>buildEither(first:)</code> builds the first branch of a conditional, while <code>buildEither(second:)</code> builds the second branch. They let the builder pick which code to include based on conditions.</p>
Click to reveal answer
beginner
Give a simple example of using BuildOptional in a Swift result builder.
<pre>struct MyBuilder {
  @resultBuilder
  struct Builder {
    static func buildBlock(_ components: String?...) -> String {
      components.compactMap { $0 }.joined(separator: ", ")
    }
    static func buildOptional(_ component: String?) -> String? {
      component
    }
  }

  @Builder
  func build(_ includeExtra: Bool) -> String {
    "Hello"
    if includeExtra {
      "World"
    }
  }
}

let example = MyBuilder().build(true)  // "Hello, World"
let example2 = MyBuilder().build(false) // "Hello"</pre>
Click to reveal answer
What does BuildOptional allow in Swift result builders?
AIncluding optional code blocks without else
BHandling loops inside builders
CChoosing between two code paths
DDefining variables inside builders
Which method handles if-else in result builders?
AbuildOptional
BbuildBlock
CbuildEither
DbuildArray
What does buildEither(second:) do?
ABuilds the first branch of a condition
BBuilds the second branch of a condition
CBuilds optional content
DBuilds an array of components
If an optional block is missing, what does buildOptional return?
Anil
BAn empty string
CAn error
DZero
Which of these is true about BuildEither?
AIt combines multiple components
BIt only works with loops
CIt makes code optional
DIt chooses between two code paths
Explain how BuildOptional works in Swift result builders and when you would use it.
Think about optional parts in your code that may or may not run.
You got /4 concepts.
    Describe the role of BuildEither in handling conditional branches inside result builders.
    Consider how you pick between two options in your code.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of buildOptional in Swift's result builders?
      easy
      A. To choose between two code paths explicitly
      B. To wrap optional code blocks so they can be included or skipped
      C. To force unwrap optionals in code blocks
      D. To create loops inside result builders

      Solution

      1. Step 1: Understand buildOptional's role

        buildOptional is designed to handle optional code blocks, allowing them to be included if present or skipped if nil.
      2. Step 2: Compare with other builder functions

        buildEither chooses between two paths, but buildOptional specifically wraps optional code, making it flexible for optional UI parts.
      3. Final Answer:

        To wrap optional code blocks so they can be included or skipped -> Option B
      4. Quick Check:

        buildOptional wraps optionals = B [OK]
      Hint: Remember: buildOptional handles optionals, buildEither picks sides [OK]
      Common Mistakes:
      • Confusing buildOptional with buildEither
      • Thinking buildOptional forces unwrapping
      • Assuming buildOptional creates loops
      2. Which of the following is the correct syntax to use buildEither for choosing the first branch in a Swift result builder?
      easy
      A. buildEither(option: 1) { Text("First") }
      B. buildEither(second: { Text("First") })
      C. buildEither(first: { Text("First") })
      D. buildEither(branch: .first, content: { Text("First") })

      Solution

      1. Step 1: Recall buildEither syntax

        The correct syntax uses named parameters first or second to specify the branch.
      2. Step 2: Identify the correct usage

        buildEither(first: { Text("First") }) uses buildEither(first: { ... }), which matches the official Swift syntax for choosing the first branch.
      3. Final Answer:

        buildEither(first: { Text("First") }) -> Option C
      4. Quick Check:

        buildEither first branch = A [OK]
      Hint: Use named parameters first or second with buildEither [OK]
      Common Mistakes:
      • Using incorrect parameter names like option or branch
      • Confusing first and second parameters
      • Trying to pass branch as enum instead of named argument
      3. What will be the output of this Swift code using buildEither?
      enum ResultBuilder {
        static func buildEither(first: String) -> String { "First: \(first)" }
        static func buildEither(second: String) -> String { "Second: \(second)" }
      }
      
      let result = ResultBuilder.buildEither(first: "Hello")
      print(result)
      medium
      A. Compilation error
      B. Second: Hello
      C. Hello
      D. First: Hello

      Solution

      1. Step 1: Identify which buildEither is called

        The code calls buildEither(first: "Hello"), so the first overload is used.
      2. Step 2: Understand the returned string

        The first overload returns the string "First: Hello" which is printed.
      3. Final Answer:

        First: Hello -> Option D
      4. Quick Check:

        buildEither first branch returns "First: Hello" = A [OK]
      Hint: Check which named parameter is used: first or second [OK]
      Common Mistakes:
      • Assuming second branch runs when first is called
      • Expecting just the input string without prefix
      • Thinking this causes a compile error
      4. Given this Swift code snippet, what is the error and how to fix it?
      struct Builder {
        @resultBuilder
        struct MyBuilder {
          static func buildEither(first: String) -> String { first }
          static func buildEither(second: String) -> String { second }
        }
      }
      
      let value = Builder.MyBuilder.buildEither(third: "Oops")
      medium
      A. Error: No 'third' parameter; fix by using 'first' or 'second'
      B. Error: Missing return statement; fix by adding return
      C. Error: buildEither cannot be static; remove static keyword
      D. No error; code runs fine

      Solution

      1. Step 1: Identify the method call

        The code calls buildEither(third: "Oops"), but only first and second parameters exist.
      2. Step 2: Understand the fix

        To fix, replace third with either first or second to match the defined overloads.
      3. Final Answer:

        Error: No 'third' parameter; fix by using 'first' or 'second' -> Option A
      4. Quick Check:

        buildEither only accepts first or second = C [OK]
      Hint: Use only first or second parameters with buildEither [OK]
      Common Mistakes:
      • Trying to add unsupported parameter names
      • Ignoring static keyword requirements
      • Assuming code runs without error
      5. How can you use buildOptional and buildEither together to conditionally build a SwiftUI view that shows "Logged In" if a user is logged in, "Guest" if not logged in but guest mode is enabled, and nothing otherwise?
      hard
      A. Use buildOptional to wrap guest mode view, and buildEither to choose between logged in and guest
      B. Use buildEither to wrap guest mode view, and buildOptional to choose between logged in and guest
      C. Use only buildOptional for all conditions
      D. Use only buildEither for all conditions

      Solution

      1. Step 1: Understand the conditions

        We have three cases: logged in, guest mode, and neither. buildEither can choose between logged in and guest mode views.
      2. Step 2: Use buildOptional for the third case

        The third case (neither) means no view, so wrap the guest mode view in buildOptional to include it only if guest mode is enabled.
      3. Step 3: Combine both builders

        Use buildEither to select logged in or guest mode, and buildOptional to skip guest mode if disabled, resulting in no view if neither condition is true.
      4. Final Answer:

        Use buildOptional to wrap guest mode view, and buildEither to choose between logged in and guest -> Option A
      5. Quick Check:

        buildOptional wraps optional guest, buildEither picks logged in or guest = D [OK]
      Hint: buildEither picks branches; buildOptional skips optional parts [OK]
      Common Mistakes:
      • Using buildEither alone for optional skipping
      • Using buildOptional alone for branching
      • Not handling the 'no view' case properly
      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