Bird
Raised Fist0
Swiftprogramming~3 mins

Why Protocol declaration syntax in Swift? - Purpose & Use Cases

Choose your learning style10 modes available
The Big Idea

What if you could write a single set of rules that many different things promise to follow perfectly?

The Scenario

Imagine you want to create several types of objects that share some common behavior, like different vehicles that can all start and stop. Without a clear plan, you write similar code for each vehicle separately.

The Problem

Writing the same methods over and over is slow and easy to forget or make mistakes. If you want to change the behavior, you must update every single type manually, which is tiring and error-prone.

The Solution

Protocols let you define a blueprint of methods and properties that many types can follow. This way, you write the rules once, and all types that adopt the protocol promise to follow them, making your code cleaner and easier to manage.

Before vs After
✗ Before
class Car {
  func start() { /* code */ }
  func stop() { /* code */ }
}

class Bike {
  func start() { /* code */ }
  func stop() { /* code */ }
}
✓ After
protocol Vehicle {
  func start()
  func stop()
}

class Car: Vehicle {
  func start() { /* code */ }
  func stop() { /* code */ }
}

class Bike: Vehicle {
  func start() { /* code */ }
  func stop() { /* code */ }
}
What It Enables

Protocols enable you to write flexible and reusable code by defining shared behavior that many types can adopt.

Real Life Example

Think of a remote control that works with any TV brand because all TVs follow the same control protocol. Similarly, protocols in Swift let different types work together smoothly.

Key Takeaways

Protocols define a set of rules for methods and properties.

They help avoid repeating code and reduce errors.

Many types can adopt the same protocol to share behavior.

Practice

(1/5)
1. What keyword is used in Swift to declare a protocol?
easy
A. interface
B. class
C. protocol
D. struct

Solution

  1. Step 1: Recall Swift syntax for protocols

    In Swift, protocols are declared using the keyword protocol.
  2. Step 2: Compare options with known syntax

    Options like interface are from other languages, and class or struct declare types, not protocols.
  3. Final Answer:

    protocol -> Option C
  4. Quick Check:

    Keyword for protocol declaration = protocol [OK]
Hint: Remember: Swift uses 'protocol' keyword for protocols [OK]
Common Mistakes:
  • Confusing 'protocol' with 'interface' from other languages
  • Using 'class' or 'struct' instead of 'protocol'
  • Misspelling the keyword
2. Which of the following is the correct syntax to declare a protocol named Vehicle in Swift?
easy
A. protocol Vehicle {}
B. protocol Vehicle() {}
C. protocol Vehicle[] {}
D. protocol Vehicle<> {}

Solution

  1. Step 1: Understand protocol declaration syntax

    Protocols are declared with the keyword protocol, followed by the name and curly braces without parentheses or brackets.
  2. Step 2: Check each option

    protocol Vehicle {} uses correct syntax: protocol Vehicle {}. Options B, C, and D incorrectly add parentheses or brackets.
  3. Final Answer:

    protocol Vehicle {} -> Option A
  4. Quick Check:

    Protocol declaration uses curly braces only [OK]
Hint: Protocols use curly braces, no parentheses or brackets [OK]
Common Mistakes:
  • Adding parentheses after protocol name
  • Using square or angle brackets incorrectly
  • Omitting curly braces
3. What will be the output of this Swift code?
protocol Greetable {
    func greet() -> String
}

struct Person: Greetable {
    func greet() -> String {
        return "Hello!"
    }
}

let p = Person()
print(p.greet())
medium
A. Hello!
B. greet()
C. Error: Missing protocol method implementation
D. nil

Solution

  1. Step 1: Understand protocol and struct implementation

    The protocol Greetable requires a method greet() returning a String. The struct Person implements this method returning "Hello!".
  2. Step 2: Analyze the print statement

    Creating an instance p of Person and calling p.greet() returns "Hello!", which is printed.
  3. Final Answer:

    Hello! -> Option A
  4. Quick Check:

    Implemented protocol method returns "Hello!" [OK]
Hint: Protocol methods must be implemented; output is returned string [OK]
Common Mistakes:
  • Assuming protocol methods run automatically without implementation
  • Expecting error due to protocol conformance
  • Confusing method name with output
4. Identify the error in this protocol declaration:
protocol Drawable {
    func draw()
    var color: String
}
medium
A. func draw() must have a return type
B. Protocol properties must specify { get } or { get set }
C. Protocol name must start with uppercase letter
D. Missing parentheses after func draw

Solution

  1. Step 1: Check protocol property declaration rules

    In Swift, protocol properties must declare if they are readable or writable using { get } or { get set }.
  2. Step 2: Analyze the given property

    The property color: String lacks { get } or { get set }, causing a syntax error.
  3. Final Answer:

    Protocol properties must specify { get } or { get set } -> Option B
  4. Quick Check:

    Protocol property syntax requires access specifiers [OK]
Hint: Always add { get } or { get set } to protocol properties [OK]
Common Mistakes:
  • Omitting { get } or { get set } in protocol properties
  • Adding parentheses to property declarations
  • Thinking protocol names must be uppercase
5. You want to declare a protocol Identifiable that requires a read-only id property of type String and a method identify() that returns a String. Which is the correct declaration?
hard
A. protocol Identifiable { let id: String func identify() -> String }
B. protocol Identifiable { var id: String func identify() }
C. protocol Identifiable { var id: String { get set } func identify() -> String }
D. protocol Identifiable { var id: String { get } func identify() -> String }

Solution

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

    A read-only property in a protocol must be declared with { get } to indicate it can be read but not written.
  2. Step 2: Check method signature

    The method identify() must specify return type String as required.
  3. Step 3: Evaluate options

    protocol Identifiable { var id: String { get } func identify() -> String } correctly declares var id: String { get } and func identify() -> String. protocol Identifiable { var id: String func identify() } misses { get } and return type. protocol Identifiable { let id: String func identify() -> String } uses let which is invalid in protocols. protocol Identifiable { var id: String { get set } func identify() -> String } allows writing with { get set }, not read-only.
  4. Final Answer:

    protocol Identifiable { var id: String { get } func identify() -> String } -> Option D
  5. Quick Check:

    Read-only property uses { get } and method return type matches [OK]
Hint: Use { get } for read-only properties in protocols [OK]
Common Mistakes:
  • Using 'let' instead of 'var' in protocol
  • Omitting { get } for read-only properties
  • Missing return type in method declaration
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