Bird
Raised Fist0
Swiftprogramming~20 mins

Protocol requirements (methods and properties) in Swift - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Protocol Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of a struct conforming to a protocol with property requirements
What is the output of this Swift code when run?
Swift
protocol Vehicle {
    var numberOfWheels: Int { get }
    func description() -> String
}

struct Bike: Vehicle {
    var numberOfWheels: Int = 2
    func description() -> String {
        return "Bike with \(numberOfWheels) wheels"
    }
}

let myBike = Bike()
print(myBike.description())
ARuntime error
BBike with wheels
CCompilation error: missing property implementation
DBike with 2 wheels
Attempts:
2 left
💡 Hint
Check how the struct implements the protocol's property and method.
❓ Predict Output
intermediate
2:00remaining
Protocol method requirement with mutating keyword
What will be printed when this Swift code runs?
Swift
protocol Toggleable {
    mutating func toggle()
}

struct LightSwitch: Toggleable {
    var isOn = false
    mutating func toggle() {
        isOn = !isOn
    }
}

var light = LightSwitch()
light.toggle()
print(light.isOn)
Atrue
Bfalse
CCompilation error: missing mutating keyword
DRuntime error
Attempts:
2 left
💡 Hint
Look at how the toggle method changes the isOn property.
🔧 Debug
advanced
2:00remaining
Identify the error in protocol property implementation
Why does this Swift code fail to compile?
Swift
protocol Identifiable {
    var id: String { get set }
}

struct User: Identifiable {
    let id: String
}
AMissing method implementation
BCannot assign let property 'id' to protocol requiring get set
CProtocol requires static property 'id'
DNo error, code compiles fine
Attempts:
2 left
💡 Hint
Check the difference between 'let' and 'var' in property requirements.
📝 Syntax
advanced
2:00remaining
Correct syntax for protocol property with optional get and set
Which option correctly declares a protocol property that can be read and optionally written?
Avar name: String { get set }
Bvar name: String { get }
Cvar name: String { set }
Dvar name: String { get optional set }
Attempts:
2 left
💡 Hint
Protocols specify property requirements with get and set keywords.
🚀 Application
expert
3:00remaining
Implement a protocol with a class and demonstrate property observer
Given this protocol, which class implementation correctly conforms and prints a message when the property changes?
Swift
protocol TemperatureMonitor {
    var temperature: Double { get set }
}

class Sensor: TemperatureMonitor {
    var temperature: Double = 0.0 {
        didSet {
            print("Temperature changed to \(temperature)")
        }
    }
}

let sensor = Sensor()
sensor.temperature = 25.5
ACompilation error: property observer not allowed
BNo output printed
CPrints 'Temperature changed to 25.5'
DRuntime error
Attempts:
2 left
💡 Hint
Property observers can be used in classes to react to changes.

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