Bird
Raised Fist0
Swiftprogramming~5 mins

Protocol requirements (methods and properties) in Swift - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a protocol in Swift?
A protocol in Swift is like a blueprint that defines methods and properties a type must have. It tells what to do, but not how to do it.
Click to reveal answer
beginner
Can protocols require both methods and properties?
Yes, protocols can require methods (functions) and properties (variables) that conforming types must implement.
Click to reveal answer
intermediate
What does it mean when a protocol property is declared with { get set }?
It means the property must be readable and writable by the conforming type.
Click to reveal answer
beginner
How do you declare a method requirement in a Swift protocol?
You write the method signature without a body inside the protocol. For example:
func start()
Click to reveal answer
intermediate
Can protocol requirements specify if a property is a variable or constant?
No, protocols only specify if a property is gettable or settable. The conforming type decides if it uses var or let.
Click to reveal answer
What must a type do when it conforms to a protocol with property requirements?
AIgnore property requirements
BOnly implement methods, properties are optional
CImplement all required properties with correct get/set access
DImplement properties but methods are optional
How do you declare a read-only property requirement in a protocol?
Avar name: String { set }
Bvar name: String { get }
Clet name: String
Dfunc name() -> String
Which of these is a valid method requirement in a Swift protocol?
Afunc run()
Bfunc run() {}
Cfunc run() -> Void {}
Dfunc run() -> Void { print("Run") }
If a protocol requires a property with { get set }, can a conforming type implement it as a constant (let)?
AOnly if the property is static
BYes, constants are allowed
COnly if the property is private
DNo, it must be a variable (var) to allow setting
What happens if a type does not implement all protocol requirements?
ACompilation error
BThe program runs but with warnings
CThe missing requirements are ignored
DThe protocol is automatically changed
Explain what protocol requirements are in Swift and how they apply to methods and properties.
Think about what a protocol asks a type to provide.
You got /4 concepts.
    Describe the difference between { get } and { get set } in protocol property requirements.
    Focus on property access levels.
    You got /4 concepts.

      Practice

      (1/5)
      1. What does a protocol in Swift require from a type that adopts it?
      easy
      A. To declare new methods unrelated to the protocol
      B. To inherit from a superclass
      C. To override all existing methods
      D. To implement all the methods and properties declared in the protocol

      Solution

      1. Step 1: Understand protocol purpose

        Protocols define a set of methods and properties that a type must implement.
      2. Step 2: Check adoption requirements

        Any type adopting a protocol must provide implementations for all its requirements.
      3. Final Answer:

        To implement all the methods and properties declared in the protocol -> Option D
      4. Quick Check:

        Protocol adoption = implement all requirements [OK]
      Hint: Protocols require full implementation of declared methods and properties [OK]
      Common Mistakes:
      • Thinking protocols require inheritance from a class
      • Assuming methods can be skipped
      • Confusing protocol adoption with subclassing
      2. Which of the following is the correct way to declare a read-only property requirement in a Swift protocol?
      easy
      A. var name: String { get }
      B. var name: String { get set }
      C. let name: String
      D. func name() -> String

      Solution

      1. Step 1: Recall property syntax in protocols

        Read-only properties use { get } to indicate they must be readable but not necessarily writable.
      2. Step 2: Analyze options

        var name: String { get } uses { get } correctly; var name: String { get set } requires read-write; let name: String is invalid in protocols; func name() -> String is a method, not a property.
      3. Final Answer:

        var name: String { get } -> Option A
      4. Quick Check:

        Read-only property = { get } [OK]
      Hint: Use { get } for read-only property in protocols [OK]
      Common Mistakes:
      • Using let instead of var in protocol
      • Confusing methods with properties
      • Using { get set } for read-only properties
      3. Consider the following Swift code:
      protocol Vehicle {
          var speed: Double { get set }
          func description() -> String
      }
      
      struct Car: Vehicle {
          var speed: Double
          func description() -> String {
              return "Car speed is \(speed) km/h"
          }
      }
      
      let myCar = Car(speed: 80)
      print(myCar.description())

      What is the output when this code runs?
      medium
      A. Error: Protocol requirements not met
      B. Car speed is 80.0 km/h
      C. Car speed is 80 km/h
      D. Car speed is km/h

      Solution

      1. Step 1: Check protocol conformance

        Car struct implements the required property speed and method description(), fulfilling Vehicle protocol.
      2. Step 2: Analyze print output

        The description() returns "Car speed is \(speed) km/h". Since speed is 80.0 (Double), string interpolation formats it as "80.0".
      3. Final Answer:

        Car speed is 80.0 km/h -> Option B
      4. Quick Check:

        Protocol methods implemented = correct output [OK]
      Hint: String interpolation for Double 80.0 prints '80.0' [OK]
      Common Mistakes:
      • Expecting 80 instead of 80.0
      • Thinking protocol conformance causes error
      • Missing string interpolation syntax
      4. Given this protocol and struct:
      protocol Shape {
          var area: Double { get }
          func perimeter() -> Double
      }
      
      struct Square: Shape {
          var side: Double
          var area: Double {
              side * side
          }
      }

      What is the error in the code?
      medium
      A. area property should be var with get set
      B. side property must be a constant (let)
      C. Missing implementation of perimeter() method
      D. Square cannot have computed properties

      Solution

      1. Step 1: Check protocol requirements

        Shape protocol requires a read-only property area and a method perimeter().
      2. Step 2: Verify Square struct implementation

        Square implements area as computed property but does not implement perimeter() method.
      3. Final Answer:

        Missing implementation of perimeter() method -> Option C
      4. Quick Check:

        All protocol methods must be implemented [OK]
      Hint: All protocol methods must be implemented, or error occurs [OK]
      Common Mistakes:
      • Assuming computed properties are not allowed
      • Thinking get set is required for read-only
      • Ignoring missing method implementations
      5. You want to create a protocol Identifiable that requires a read-only id property of type String and a method identify() that prints the id. Which of the following is the correct protocol and extension to provide a default implementation of identify()?
      hard
      A. protocol Identifiable { var id: String { get } func identify() } extension Identifiable { func identify() { print("ID: \(id)") } }
      B. protocol Identifiable { var id: String { get set } func identify() } extension Identifiable { func identify() { print(id) } }
      C. protocol Identifiable { let id: String func identify() } extension Identifiable { func identify() { print("ID is " + id) } }
      D. protocol Identifiable { var id: String { get } func identify() -> String } extension Identifiable { func identify() -> String { return id } }

      Solution

      1. Step 1: Define protocol requirements

        id must be read-only, so use { get } and identify() method with no return.
      2. Step 2: Provide default implementation in extension

        Extension implements identify() printing "ID: \(id)" matching protocol signature.
      3. Final Answer:

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

        Read-only property + default method in extension [OK]
      Hint: Use protocol extension for default method implementations [OK]
      Common Mistakes:
      • Using let in protocol property
      • Changing method signature in extension
      • Making id writable when only read-only needed
      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