Bird
Raised Fist0
Swiftprogramming~5 mins

Protocol declaration syntax in Swift - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Protocol declaration syntax
O(n)
Understanding Time Complexity

Let's see how the time to declare a protocol changes as the protocol grows.

We want to know how adding more requirements affects the work done when declaring a protocol.

Scenario Under Consideration

Analyze the time complexity of the following code snippet.


protocol Vehicle {
    var numberOfWheels: Int { get }
    func startEngine()
    func stopEngine()
    func drive(distance: Double)
}

This code declares a protocol named Vehicle with some properties and methods that any conforming type must implement.

Identify Repeating Operations

Look for parts that repeat or grow with input size.

  • Primary operation: Listing each property and method requirement inside the protocol.
  • How many times: Once for each requirement added to the protocol.
How Execution Grows With Input

As you add more requirements, the work to declare the protocol grows in a simple way.

Input Size (n)Approx. Operations
44 operations (4 requirements)
1010 operations
100100 operations

Pattern observation: The work grows directly with the number of requirements you add.

Final Time Complexity

Time Complexity: O(n)

This means the time to declare a protocol grows linearly with the number of requirements it has.

Common Mistake

[X] Wrong: "Declaring a protocol always takes the same time no matter how many requirements it has."

[OK] Correct: Each requirement adds a small amount of work, so more requirements mean more time to declare.

Interview Connect

Understanding how code size affects work helps you write efficient and clear protocols, a skill useful in real projects and interviews.

Self-Check

"What if the protocol inherits from multiple other protocols? How would the time complexity change?"

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