Bird
Raised Fist0
Swiftprogramming~5 mins

Why protocol-oriented programming matters in Swift

Choose your learning style10 modes available
Introduction

Protocol-oriented programming helps you write clear and reusable code by focusing on what things can do, not what they are.

When you want to share common behavior across different types without using inheritance.
When you want to write flexible code that works with many kinds of objects.
When you want to make your code easier to test and maintain.
When you want to define clear rules for what a type should do.
When you want to avoid tight coupling between parts of your code.
Syntax
Swift
protocol SomeProtocol {
    func doSomething()
}

struct SomeStruct: SomeProtocol {
    func doSomething() {
        // implementation
    }
}

A protocol defines a blueprint of methods or properties.

Types like structs, classes, or enums can adopt protocols to promise they implement those methods.

Examples
This example shows a protocol Drivable and a struct Car that follows it.
Swift
protocol Drivable {
    func drive()
}

struct Car: Drivable {
    func drive() {
        print("Car is driving")
    }
}
Here, the protocol requires a property id. The struct User provides it.
Swift
protocol Identifiable {
    var id: String { get }
}

struct User: Identifiable {
    var id: String
}
Sample Program

This program shows how different types can follow the same protocol and be used interchangeably.

Swift
protocol Greetable {
    func greet()
}

struct Person: Greetable {
    var name: String
    func greet() {
        print("Hello, my name is \(name)")
    }
}

struct Robot: Greetable {
    func greet() {
        print("Beep boop, I am a robot")
    }
}

func sayHello(to greeter: Greetable) {
    greeter.greet()
}

let alice = Person(name: "Alice")
let bot = Robot()

sayHello(to: alice)
sayHello(to: bot)
OutputSuccess
Important Notes

Protocols let you write code that works with many types, making your code flexible.

Using protocols can reduce the need for complex class inheritance.

Swift's standard library uses protocols a lot, so learning them helps you understand Swift better.

Summary

Protocols define what actions or properties a type must have.

Protocol-oriented programming focuses on behavior, not just data.

This approach makes your code easier to reuse and maintain.

Practice

(1/5)
1. What is the main purpose of protocols in Swift's protocol-oriented programming?
easy
A. To define a blueprint of methods and properties that a type must implement
B. To store data like variables and constants
C. To create user interfaces
D. To manage memory automatically

Solution

  1. Step 1: Understand what protocols represent

    Protocols specify a set of methods and properties that a type must have, acting as a blueprint.
  2. Step 2: Differentiate protocols from data storage

    Protocols do not store data themselves; they only define behavior and requirements.
  3. Final Answer:

    To define a blueprint of methods and properties that a type must implement -> Option A
  4. Quick Check:

    Protocols = Blueprint of behavior [OK]
Hint: Protocols define required behavior, not data storage [OK]
Common Mistakes:
  • Thinking protocols store data
  • Confusing protocols with classes or structs
  • Assuming protocols manage memory
2. Which of the following is the correct syntax to declare a protocol named Drivable in Swift?
easy
A. struct Drivable { func drive() }
B. class Drivable { func drive() }
C. func protocol Drivable() { drive() }
D. protocol Drivable { func drive() }

Solution

  1. Step 1: Recall protocol declaration syntax

    Protocols are declared using the keyword protocol followed by the name and curly braces.
  2. Step 2: Identify correct method declaration inside protocol

    Inside protocols, methods are declared without implementation, just the signature.
  3. Final Answer:

    protocol Drivable { func drive() } -> Option D
  4. Quick Check:

    Use 'protocol' keyword and method signature [OK]
Hint: Protocols start with 'protocol' keyword, not class or struct [OK]
Common Mistakes:
  • Using class or struct instead of protocol
  • Trying to implement method inside protocol
  • Incorrect keyword order
3. What will be the output of the following Swift code?
protocol Greetable {
    func greet() -> String
}

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

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

Solution

  1. Step 1: Check protocol and struct conformance

    The struct Person conforms to Greetable and implements greet() returning "Hello!".
  2. Step 2: Understand the print statement output

    Calling p.greet() returns "Hello!", which is printed.
  3. Final Answer:

    Hello! -> Option C
  4. Quick Check:

    Protocol method implemented returns "Hello!" [OK]
Hint: Check if method returns a string and is called correctly [OK]
Common Mistakes:
  • Assuming protocol methods print automatically
  • Thinking missing implementation error occurs
  • Confusing method name with output
4. Identify the error in this Swift code using protocol-oriented programming:
protocol Runnable {
    func run()
}

struct Athlete: Runnable {
    // Missing run() implementation
}

let athlete = Athlete()
athlete.run()
medium
A. Athlete struct must implement run() method
B. Protocol Runnable cannot be used with structs
C. run() method should return a value
D. Cannot create instance of Athlete

Solution

  1. Step 1: Check protocol requirements

    The protocol Runnable requires a run() method to be implemented.
  2. Step 2: Verify struct conformance

    The struct Athlete does not implement run(), so it does not conform properly.
  3. Final Answer:

    Athlete struct must implement run() method -> Option A
  4. Quick Check:

    Protocol methods must be implemented in conforming types [OK]
Hint: Check if all protocol methods are implemented in struct/class [OK]
Common Mistakes:
  • Assuming protocols can't be used with structs
  • Thinking run() must return a value
  • Believing instance creation is the error
5. You want to create a reusable logging system in Swift using protocol-oriented programming. Which approach best supports easy reuse and maintenance?
hard
A. Use global variables to store logs
B. Define a protocol Loggable with a log() method, then extend it with default implementation
C. Write separate logging functions in each class without protocols
D. Create a base class Logger and inherit from it everywhere

Solution

  1. Step 1: Understand protocol-oriented programming benefits

    Protocols with default implementations allow behavior sharing without inheritance.
  2. Step 2: Evaluate options for reuse and maintenance

    Extending a protocol with default log() method lets many types reuse logging easily and maintain code in one place.
  3. Final Answer:

    Define a protocol Loggable with a log() method, then extend it with default implementation -> Option B
  4. Quick Check:

    Protocols + extensions = reusable, maintainable code [OK]
Hint: Use protocol with default methods for reusable behavior [OK]
Common Mistakes:
  • Relying on inheritance instead of protocols
  • Duplicating code in each class
  • Using global variables for behavior
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