Bird
Raised Fist0
Swiftprogramming~10 mins

BuildOptional and buildEither 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 an optional view using BuildOptional.

Swift
var body: some View {
    VStack {
        Text("Hello")
        [1] {
            Text("Optional View")
        }
    }
}
Drag options to blanks, or click blank then click option'
AbuildEither
BbuildOptional
CbuildBlock
DbuildArray
Attempts:
3 left
💡 Hint
Common Mistakes
Using buildEither instead of buildOptional for optional views.
Using buildBlock which is for multiple views, not optional ones.
2fill in blank
medium

Complete the code to choose the first view in a conditional using BuildEither.

Swift
var body: some View {
    Group {
        [1].first(
            Text("First View"),
            Text("Second View")
        )
    }
}
Drag options to blanks, or click blank then click option'
AbuildEither
BbuildOptional
CbuildBlock
DbuildArray
Attempts:
3 left
💡 Hint
Common Mistakes
Using buildOptional when two views are involved.
Using buildBlock which is for multiple views, not conditional choices.
3fill in blank
hard

Fix the error in the code by choosing the correct builder function for an either-or view.

Swift
var body: some View {
    Group {
        [1].second(
            Text("Option A"),
            Text("Option B")
        )
    }
}
Drag options to blanks, or click blank then click option'
AbuildEither
BbuildBlock
CbuildOptional
DbuildArray
Attempts:
3 left
💡 Hint
Common Mistakes
Using buildOptional which only handles optional views.
Using buildBlock which is for multiple views, not conditional choices.
4fill in blank
hard

Fill both blanks to create a dictionary comprehension that uses buildOptional and buildEither.

Swift
let views = [
    "optional": [1](Text("Optional View")),
    "either": [2].first(Text("First"), Text("Second"))
]
Drag options to blanks, or click blank then click option'
AbuildOptional
BbuildBlock
CbuildEither
DbuildArray
Attempts:
3 left
💡 Hint
Common Mistakes
Mixing up buildBlock with buildOptional or buildEither.
Using buildArray which is for arrays, not conditionals.
5fill in blank
hard

Fill all three blanks to build a dictionary with keys using buildEither and values using buildOptional.

Swift
let components = [
    [1].second("key1", "key2"): [2](Text("Value1")),
    [3].first("key3", "key4"): [2](Text("Value2"))
]
Drag options to blanks, or click blank then click option'
AbuildBlock
BbuildOptional
CbuildEither
DbuildArray
Attempts:
3 left
💡 Hint
Common Mistakes
Using buildBlock for keys or values which is incorrect here.
Confusing buildArray with buildEither or buildOptional.

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