Protocols define requirements that types adopt—Swift’s primary abstraction for polymorphism, comparable to interfaces in Java, Kotlin, and C#, but with extension default implementations.
Defining and conforming
protocol Describable {
var label: String { get }
func describe() -> String
}
struct User: Describable {
let label: String
func describe() -> String { "User: \(label)" }
}
Protocol-oriented programming
Extend protocols with default implementations; compose small protocols instead of deep class hierarchies—core Swift design philosophy.
Important interview questions and answers
- Q: Protocol vs abstract class?
A: Protocols work with structs, enums, and classes; support retroactive modeling via extensions; no stored state in the protocol itself. - Q: Any vs protocol type?
A: Existentialany Protocol(Swift 5.7+) boxes heterogeneous conformers; generics preserve concrete types at compile time.
Self-check
- Can structs conform to protocols?
- What keyword marks protocol adoption?
Tip: Compose small protocols—Swift favors protocol-oriented design over deep inheritance.
Interview prep
- Protocol vs abstract class?
Protocols work with structs/enums; no stored state; extensions add defaults.
- any Protocol?
Existential boxes heterogeneous conformers; generics preserve concrete types.