Challenge - 5 Problems
Opaque Types Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate2:00remaining
Output of function returning opaque type
What is the output of this Swift code using
some keyword for opaque return type?Swift
protocol Shape { func area() -> Double } struct Circle: Shape { var radius: Double func area() -> Double { return Double.pi * radius * radius } } func makeCircle() -> some Shape { return Circle(radius: 3) } print(Int(makeCircle().area()))
Attempts:
2 left
💡 Hint
Recall the formula for the area of a circle and how opaque types hide the concrete type but preserve behavior.
✗ Incorrect
The function returns a Circle with radius 3. Area = π * 3 * 3 ≈ 28.27. Casting to Int truncates to 28.
❓ Predict Output
intermediate2:00remaining
Opaque type with conditional return
What will be printed by this Swift code using
some keyword with conditional return?Swift
protocol Animal { func sound() -> String } struct Dog: Animal { func sound() -> String { "Woof" } } struct Cat: Animal { func sound() -> String { "Meow" } } func makePet(_ isDog: Bool) -> some Animal { if isDog { return Dog() } else { return Dog() // Note: returns Dog in both cases } } print(makePet(false).sound())
Attempts:
2 left
💡 Hint
Remember that opaque types must always return the same concrete type, even if conditions differ.
✗ Incorrect
Both branches return Dog, so the opaque type is Dog. The sound is "Woof" regardless of the input.
🔧 Debug
advanced2:00remaining
Identify the error with opaque type mismatch
What error does this Swift code produce and why?
Swift
protocol Vehicle { func wheels() -> Int } struct Bike: Vehicle { func wheels() -> Int { 2 } } struct Car: Vehicle { func wheels() -> Int { 4 } } func makeVehicle(_ useBike: Bool) -> some Vehicle { if useBike { return Bike() } else { return Car() } }
Attempts:
2 left
💡 Hint
Opaque types require the same concrete type returned in every return path.
✗ Incorrect
The function returns Bike in one branch and Car in another. This violates the opaque type rule causing a compile-time error.
🧠 Conceptual
advanced2:00remaining
Why use opaque types with some keyword?
Which of the following best explains the main advantage of using
some keyword for opaque return types in Swift?Attempts:
2 left
💡 Hint
Think about abstraction and performance benefits.
✗ Incorrect
Opaque types hide the concrete type but keep static type safety, enabling optimizations unlike returning protocol types directly.
❓ Predict Output
expert3:00remaining
Output of nested opaque types with some keyword
What is the output of this Swift code using nested opaque types with
some keyword?Swift
protocol Container { associatedtype Item func getItem() -> Item } struct Box<T>: Container { var item: T func getItem() -> T { item } } func makeBox() -> some Container { Box(item: 42) } func wrapBox() -> some Container { makeBox() } print(wrapBox().getItem())
Attempts:
2 left
💡 Hint
Opaque types can be nested if the concrete type is consistent.
✗ Incorrect
Both functions return Box as the concrete type, so the code compiles and prints 42.