Bird
Raised Fist0
Swiftprogramming~5 mins

Protocol extensions with default implementations in Swift - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a protocol extension in Swift?
A protocol extension in Swift allows you to add methods, properties, and default implementations to a protocol. This means any type that adopts the protocol can use these default behaviors without having to implement them explicitly.
Click to reveal answer
beginner
How do default implementations in protocol extensions help reduce code duplication?
Default implementations provide a shared behavior for all types conforming to the protocol. Instead of writing the same method in every conforming type, you write it once in the protocol extension, and all conforming types get it automatically.
Click to reveal answer
intermediate
Can a conforming type override a default implementation provided by a protocol extension?
Yes, a conforming type can provide its own implementation of a method or property, which will override the default implementation from the protocol extension.
Click to reveal answer
intermediate
What happens if a method is declared in a protocol and also implemented in its extension, but a conforming type provides its own implementation?
The conforming type's implementation is used instead of the default one from the protocol extension. This allows customization while still benefiting from default behavior when no custom implementation is provided.
Click to reveal answer
intermediate
Why can't protocol extensions add stored properties?
Protocol extensions can only add computed properties or methods because protocols don't have storage. Stored properties require memory allocation, which is only possible in concrete types, not protocols.
Click to reveal answer
What is the main benefit of using default implementations in protocol extensions?
ATo prevent conforming types from overriding methods
BTo force all conforming types to implement the method
CTo add stored properties to protocols
DTo provide shared behavior to all conforming types without rewriting code
Can a conforming type override a method provided by a protocol extension?
AYes, it can provide its own implementation
BOnly if the method is marked as override
CNo, the default implementation is final
DOnly if the protocol is a class protocol
Which of the following can NOT be added in a protocol extension?
AMethods
BComputed properties
CStored properties
DDefault implementations
If a protocol declares a method and its extension provides a default implementation, what happens if a conforming type does NOT implement that method?
ACompilation error
BThe default implementation is used
CThe method is ignored
DThe program crashes at runtime
Why are protocol extensions useful in Swift?
AThey provide default behavior and reduce code duplication
BThey allow adding stored properties to protocols
CThey enable multiple inheritance
DThey replace classes
Explain how protocol extensions with default implementations work in Swift and why they are useful.
Think about how you can write one method once and use it in many types.
You got /4 concepts.
    Describe the limitations of protocol extensions regarding stored properties and how you can work around them.
    Remember protocols don't have memory to store data.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of using protocol extensions with default implementations in Swift?
      easy
      A. To allow protocols to store properties
      B. To create new classes that inherit from protocols
      C. To enforce that all conforming types must implement every method
      D. To provide default method implementations that all conforming types can use

      Solution

      1. Step 1: Understand protocol extensions

        Protocol extensions allow adding methods or properties with default behavior to protocols.
      2. Step 2: Identify the purpose of default implementations

        Default implementations let conforming types use common code without writing it themselves.
      3. Final Answer:

        To provide default method implementations that all conforming types can use -> Option D
      4. Quick Check:

        Default implementations = shared code for all [OK]
      Hint: Default implementations give shared code to all conforming types [OK]
      Common Mistakes:
      • Thinking protocols can store properties
      • Confusing protocol inheritance with extensions
      • Believing all methods must be implemented manually
      2. Which of the following is the correct syntax to add a default implementation for a protocol method in Swift?
      easy
      A. extension MyProtocol { func greet() { print(\"Hello\") } }
      B. protocol MyProtocol { extension func greet() { print(\"Hello\") } }
      C. func greet() in MyProtocol { print(\"Hello\") }
      D. MyProtocol { func greet() { print(\"Hello\") } }"

      Solution

      1. Step 1: Recall syntax for protocol extensions

        Default implementations are added inside an extension of the protocol.
      2. Step 2: Check each option

        extension MyProtocol { func greet() { print(\"Hello\") } } correctly uses extension MyProtocol { func greet() { ... } }. Others misuse keywords or structure.
      3. Final Answer:

        extension MyProtocol { func greet() { print("Hello") } } -> Option A
      4. Quick Check:

        Use extension to add defaults [OK]
      Hint: Use 'extension ProtocolName' to add default methods [OK]
      Common Mistakes:
      • Trying to put method bodies inside protocol declaration
      • Using 'extension' inside protocol block
      • Omitting the 'extension' keyword
      3. Consider the code below:
      protocol Speaker {
          func speak()
      }
      
      extension Speaker {
          func speak() {
              print("Speaking from extension")
          }
      }
      
      struct Person: Speaker {
          func speak() {
              print("Person speaking")
          }
      }
      
      struct Robot: Speaker {}
      
      let p = Person()
      p.speak()
      
      let r = Robot()
      r.speak()

      What is the output when this code runs?
      medium
      A. Person speaking Robot speaking
      B. Speaking from extension Speaking from extension
      C. Person speaking Speaking from extension
      D. Compilation error

      Solution

      1. Step 1: Understand method resolution for protocol extensions

        If a conforming type provides its own method, it overrides the default from the extension.
      2. Step 2: Analyze the structs

        Person implements speak() so it prints "Person speaking". Robot does not implement it, so uses default "Speaking from extension".
      3. Final Answer:

        Person speaking Speaking from extension -> Option C
      4. Quick Check:

        Own method overrides default extension [OK]
      Hint: Own method overrides default extension method [OK]
      Common Mistakes:
      • Assuming default is always called
      • Expecting Robot to cause error
      • Confusing protocol declaration with implementation
      4. The following code tries to add a default implementation for describe() in a protocol extension, but it causes a compile error. What is the mistake?
      protocol Describable {
          func describe()
      }
      
      extension Describable {
          func describe
          {
              print("Default description")
          }
      }
      medium
      A. Protocol cannot have methods without bodies
      B. Missing parentheses after method name in extension
      C. Extension cannot provide method implementations
      D. Missing 'func' keyword in extension

      Solution

      1. Step 1: Check method syntax in extension

        Method definitions require parentheses even if no parameters are present.
      2. Step 2: Identify the error

        The extension method func describe is missing parentheses () after the name.
      3. Final Answer:

        Missing parentheses after method name in extension -> Option B
      4. Quick Check:

        Method syntax needs () even if empty [OK]
      Hint: Always include () after method name in definitions [OK]
      Common Mistakes:
      • Omitting parentheses in method declaration
      • Thinking protocol methods must have bodies
      • Believing extensions can't implement methods
      5. You want to create a protocol Identifiable with a property id and a default method identify() that prints the id. How would you write the protocol and extension so that conforming types can use the default identify() without extra code?
      hard
      A. protocol Identifiable { var id: String { get } }\nextension Identifiable { func identify() { print(\"ID: \(id)\") } }
      B. protocol Identifiable { func identify() }\nextension Identifiable { var id: String { return \"default\" } }
      C. protocol Identifiable { var id: String }\nextension Identifiable { func identify() { print(id) } }
      D. protocol Identifiable { var id: String { get set } }\nextension Identifiable { func identify() { print(\"ID: \(id)\") } }"

      Solution

      1. Step 1: Define protocol with read-only property

        Use var id: String { get } to require an id property that conforming types must provide.
      2. Step 2: Provide default identify() method in extension

        Extension adds identify() that prints the id using string interpolation.
      3. Final Answer:

        protocol Identifiable { var id: String { get } }\nextension Identifiable { func identify() { print("ID: \(id)") } } -> Option A
      4. Quick Check:

        Protocol requires id; extension adds identify() [OK]
      Hint: Require property with { get } and add method in extension [OK]
      Common Mistakes:
      • Using var id: String without { get } or { get set }
      • Trying to provide stored properties in protocol extension
      • Defining identify() in protocol but not implementing in extension
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard