0
0
Swiftprogramming~20 mins

BuildOptional and buildEither in Swift - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Swift BuildOptional & BuildEither Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
What is the output of this Swift code using buildOptional?
Consider this Swift code snippet using buildOptional in a result builder. What will be printed?
Swift
import Foundation

@resultBuilder
struct TestBuilder {
    static func buildOptional(_ component: String?) -> String {
        return component ?? "No value"
    }

    static func buildBlock(_ component: String) -> String {
        return component
    }
}

func test() -> String {
    @TestBuilder var result: String {
        if Bool.random() {
            "Hello"
        }
    }
    return result
}

print(test())
AAlways "Hello"
BCompilation error due to missing else
CAlways "No value"
D"Hello" or "No value" depending on random condition
Attempts:
2 left
💡 Hint
buildOptional handles optional components in result builders, returning a default if nil.
Predict Output
intermediate
2:00remaining
What does this Swift code print using buildEither?
Given this Swift code using buildEither in a result builder, what will be the output?
Swift
import Foundation

@resultBuilder
struct EitherBuilder {
    static func buildEither(first component: String) -> String {
        return "First: " + component
    }

    static func buildEither(second component: String) -> String {
        return "Second: " + component
    }

    static func buildBlock(_ component: String) -> String {
        return component
    }
}

func test(flag: Bool) -> String {
    @EitherBuilder var result: String {
        if flag {
            "Option A"
        } else {
            "Option B"
        }
    }
    return result
}

print(test(flag: true))
print(test(flag: false))
A"First: Option A\nSecond: Option B"
B"Option A\nOption B"
C"First: Option A\nFirst: Option A"
D"First: Option A\nOption B"
ECompilation error due to ambiguous buildEither
Attempts:
2 left
💡 Hint
buildEither distinguishes between first and second branches in conditional statements inside result builders.
🔧 Debug
advanced
2:30remaining
Why does this Swift code using buildEither cause a compilation error?
Examine this Swift code snippet using buildEither. Why does it fail to compile?
Swift
import Foundation

@resultBuilder
struct MyBuilder {
    static func buildEither(first component: Int) -> Int {
        return component
    }

    static func buildEither(second component: String) -> String {
        return component
    }

    static func buildBlock(_ component: Any) -> Any {
        return component
    }
}

func test(flag: Bool) -> Any {
    @MyBuilder var result: Any {
        if flag {
            42
        } else {
            "Answer"
        }
    }
    return result
}
AUsing Any as return type is not allowed in result builders
BbuildBlock must return the same type as buildEither
CbuildEither methods have different return types causing ambiguity
DMissing buildOptional method causes error
Attempts:
2 left
💡 Hint
Result builder functions must have consistent return types to compile.
🧠 Conceptual
advanced
1:30remaining
How does buildOptional affect the output in a Swift result builder?
In Swift result builders, what role does buildOptional play when an optional component is present?
AIt unwraps the optional and provides a default value if nil
BIt forces the optional to be non-nil or causes a runtime error
CIt ignores the optional component completely if nil
DIt converts the optional to a string representation regardless of value
Attempts:
2 left
💡 Hint
Think about how optional values are handled inside result builders.
Predict Output
expert
3:00remaining
What is the output of this complex Swift result builder using buildEither and buildOptional?
Analyze this Swift code using both buildEither and buildOptional in a result builder. What will it print?
Swift
import Foundation

@resultBuilder
struct ComplexBuilder {
    static func buildBlock(_ components: String...) -> String {
        components.joined(separator: ", ")
    }

    static func buildEither(first component: String) -> String {
        "First(\(component))"
    }

    static func buildEither(second component: String) -> String {
        "Second(\(component))"
    }

    static func buildOptional(_ component: String?) -> String {
        component ?? "None"
    }
}

func complexTest(flag1: Bool, flag2: Bool) -> String {
    @ComplexBuilder var result: String {
        if flag1 {
            "A"
        } else {
            "B"
        }
        if flag2 {
            "C"
        }
    }
    return result
}

print(complexTest(flag1: true, flag2: true))
print(complexTest(flag1: false, flag2: false))
A"A, C" and "B"
B"First(A), C" and "Second(B), None"
C"First(A), C" and "Second(B), C"
D"First(A), C" and "Second(B)"
Attempts:
2 left
💡 Hint
buildEither wraps the if-else branches, buildOptional handles the optional second if.