Challenge - 5 Problems
Existential Types Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate2:00remaining
Output of existential type usage with 'any' keyword
What is the output of this Swift code using the 'any' keyword for existential types?
Swift
protocol Greetable { func greet() -> String } struct Person: Greetable { func greet() -> String { "Hello from Person" } } func welcome(_ greeter: any Greetable) { print(greeter.greet()) } let p = Person() welcome(p)
Attempts:
2 left
💡 Hint
Remember that 'any' keyword is used to explicitly mark existential types in Swift 5.7+.
✗ Incorrect
The 'any' keyword allows the protocol to be used as a type. The function calls the greet() method on the Person instance, printing 'Hello from Person'.
❓ Predict Output
intermediate2:00remaining
Value stored in variable with 'any' existential type
What is the value of variable 'message' after running this Swift code?
Swift
protocol Describable { func describe() -> String } struct Animal: Describable { func describe() -> String { "I am an animal" } } let creature: any Describable = Animal() let message = creature.describe()
Attempts:
2 left
💡 Hint
The 'any' keyword allows calling protocol methods on the existential value.
✗ Incorrect
The variable 'creature' is typed as 'any Describable', so calling describe() returns the string from Animal's implementation.
🔧 Debug
advanced2:00remaining
Identify the error with existential type usage
What error does this Swift code produce?
Swift
protocol Runnable { func run() } func execute(task: Runnable) { task.run() } struct Job: Runnable { func run() { print("Job running") } } let job = Job() execute(task: job)
Attempts:
2 left
💡 Hint
Check if the protocol has associated types or Self requirements.
✗ Incorrect
The protocol Runnable has no associated types or Self requirements, so it can be used as a type without 'any' keyword in Swift 5.6 and earlier. In Swift 5.7+, 'any' is recommended but not mandatory here.
❓ Predict Output
advanced2:00remaining
Output when using 'any' with protocol with associated type
What happens when you try to compile and run this Swift code?
Swift
protocol Container { associatedtype Item func getItem() -> Item } struct Box: Container { func getItem() -> Int { 42 } } func printItem(container: any Container) { print(container.getItem()) } let box = Box() printItem(container: box)
Attempts:
2 left
💡 Hint
Protocols with associated types cannot be used as existential types directly.
✗ Incorrect
Because Container has an associated type, it cannot be used as an existential type with 'any'. The compiler produces an error.
🧠 Conceptual
expert2:00remaining
Why use 'any' keyword for existential types in Swift?
Which of the following best explains the purpose of the 'any' keyword in Swift existential types?
Attempts:
2 left
💡 Hint
Think about why Swift introduced the 'any' keyword in version 5.7.
✗ Incorrect
The 'any' keyword makes it clear when a protocol is used as an existential type, improving readability and helping the compiler distinguish between generic constraints and existential usage.