An existential type is a type that can hold any value conforming to a specific protocol or set of protocols. It allows you to work with values of different types through a common interface.
Click to reveal answer
beginner
What does the any keyword do in Swift?
The any keyword explicitly marks a type as an existential type, meaning it can hold any value conforming to the specified protocol. It clarifies that the value is not a specific type but any type that fits the protocol.
Click to reveal answer
beginner
How do you declare a variable that can hold any type conforming to a protocol Drawable using the any keyword?
You declare it like this: var shape: any Drawable This means shape can hold any value that conforms to the Drawable protocol.
Click to reveal answer
intermediate
Why did Swift introduce the any keyword for existential types?
Swift introduced any to make it clear when a type is existential, improving code readability and safety by distinguishing between concrete types and existential types.
Click to reveal answer
intermediate
Can you use existential types with multiple protocols? How?
Yes, you can combine multiple protocols using the any keyword like this: var value: any ProtocolA & ProtocolB This means value can hold any type conforming to both ProtocolA and ProtocolB.
Click to reveal answer
What does the any keyword in Swift indicate?
AA type alias
BA concrete type is used
CA generic type parameter
DA value can be any type conforming to a protocol
✗ Incorrect
The any keyword marks a type as existential, meaning it can hold any value conforming to the specified protocol.
Which of the following is a correct way to declare an existential type variable for protocol Equatable?
Avar item: Equatable
Bvar item: <Equatable>
Cvar item: any Equatable
Dvar item: Equatable & any
✗ Incorrect
Using any Equatable explicitly declares an existential type variable.
Why is using any keyword recommended over omitting it for existential types?
AIt improves code clarity and safety
BIt makes code run faster
CIt allows inheritance
DIt disables protocol conformance
✗ Incorrect
The any keyword makes it clear the type is existential, improving readability and safety.
Can you assign a value of a concrete type conforming to a protocol to a variable declared as any Protocol?
ANo, only existential types are allowed
BYes, because the variable accepts any conforming type
COnly if the concrete type is a class
DOnly if the concrete type is a struct
✗ Incorrect
Existential types can hold any value conforming to the protocol, including concrete types.
How do you declare a variable that conforms to both Codable and Hashable using existential types?
Avar data: any Codable & Hashable
Bvar data: Codable & Hashable
Cvar data: any Codable, Hashable
Dvar data: Codable | Hashable
✗ Incorrect
You combine protocols with & and prefix with any to declare an existential type conforming to multiple protocols.
Explain what existential types are in Swift and how the any keyword is used with them.
Think about how you can hold different types that share a protocol.
You got /3 concepts.
Describe the benefits of using the any keyword explicitly in your Swift code.
Why does Swift want you to write <code>any</code> now?
You got /3 concepts.
Practice
(1/5)
1. What does the any keyword indicate in Swift when used with a protocol type?
easy
A. It creates a new protocol that inherits from the original.
B. It marks the type as existential, allowing any value conforming to the protocol.
C. It restricts the type to only one specific conforming type.
D. It converts the protocol into a concrete class.
Solution
Step 1: Understand the role of any in Swift
The any keyword is used to mark a type as existential, meaning it can hold any value that conforms to a given protocol.
Step 2: Compare with other options
The incorrect options describe behaviors unrelated to any. It does not create new protocols, restrict to one type, or convert protocols to classes.
Final Answer:
It marks the type as existential, allowing any value conforming to the protocol. -> Option B
Quick Check:
any means existential type [OK]
Hint: Remember: any means 'any conforming type' [OK]
Common Mistakes:
Thinking any creates a new protocol
Confusing any with type restriction
Assuming any converts protocols to classes
2. Which of the following is the correct syntax to declare a variable that can hold any value conforming to the protocol Drawable using existential types?
easy
A. var shape: Drawable
B. var shape: Drawable & any
C. var shape: any Drawable
D. var shape: Drawable<any>
Solution
Step 1: Recall the syntax for existential types
In Swift, to declare a variable that can hold any value conforming to a protocol, you use any ProtocolName. So here, it is any Drawable.
Step 2: Analyze each option
var shape: Drawable misses any, so it is not explicit existential. var shape: Drawable & any and var shape: Drawable<any> have incorrect syntax. Only var shape: any Drawable uses the correct syntax.
Final Answer:
var shape: any Drawable -> Option C
Quick Check:
Existential syntax = any Protocol [OK]
Hint: Use any before protocol name for existential types [OK]
Common Mistakes:
Omitting any keyword
Placing any after protocol name
Using angle brackets incorrectly
3. What will be the output of the following Swift code?
The protocol Greetable requires a greet() method returning a String. The struct Person implements this method returning "Hello".
Step 2: Analyze the existential usage and output
The variable greeter is declared as any Greetable and assigned a Person instance. Calling greeter.greet() calls the implemented method and returns "Hello".
A. Missing any keyword before Runnable in variable declaration.
B. Dog does not conform to Runnable protocol.
C. run() method should return a value.
D. Variable runner should be a constant (let) instead of var.
Solution
Step 1: Check variable declaration syntax
Since Swift 5.7, existential types require the any keyword explicitly. The declaration var runner: Runnable is invalid; it should be var runner: any Runnable.
Step 2: Verify other parts
Dog conforms correctly, run() returns Void (allowed), and var is allowed. So only missing any is the error.
Final Answer:
Missing any keyword before Runnable in variable declaration. -> Option A
Quick Check:
Existential types need any keyword [OK]
Hint: Add any before protocol for existential variables [OK]
Common Mistakes:
Omitting any keyword
Thinking protocol conformance is missing
Expecting run() to return a value
5. You want to write a function that accepts any value conforming to the Codable protocol and returns its JSON string representation. Which is the correct way to declare the function parameter using existential types?
hard
A. func encodeToJSON(value: Codable & any) -> String
B. func encodeToJSON(value: Codable) -> String
C. func encodeToJSON(value: T) -> String
D. func encodeToJSON(value: any Codable) -> String
Solution
Step 1: Understand existential vs generic parameters
Using any Codable declares an existential type parameter that can accept any value conforming to Codable. This matches the question requirement.
Step 2: Analyze each option
func encodeToJSON(value: Codable) -> String omits any, which is invalid syntax for existential types. func encodeToJSON(value: T) -> String uses generics, which is valid but not existential. func encodeToJSON(value: Codable & any) -> String has incorrect syntax. func encodeToJSON(value: any Codable) -> String is correct.
Final Answer:
func encodeToJSON(value: any Codable) -> String -> Option D
Quick Check:
Existential parameter syntax = any Protocol [OK]
Hint: Use any before protocol for existential function parameters [OK]
Common Mistakes:
Using generics instead of existential types
Omitting any keyword
Incorrect syntax with & or angle brackets
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.