Bird
Raised Fist0
Swiftprogramming~10 mins

Protocol declaration syntax in Swift - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Protocol declaration syntax
Start Protocol Declaration
↓
Write 'protocol' keyword
↓
Name the Protocol
↓
Define Requirements (properties, methods)
↓
Close Protocol Declaration
↓
End
This flow shows how to declare a protocol: start with the keyword, name it, add required properties and methods, then close.
Execution Sample
Swift
protocol Vehicle {
    var numberOfWheels: Int { get }
    func drive()
}
Declares a protocol named Vehicle with a read-only property and a method requirement.
Execution Table
StepActionCode PartResult
1Start protocol declarationprotocolBegin defining a protocol
2Name the protocolVehicleProtocol named Vehicle created
3Declare property requirementvar numberOfWheels: Int { get }Read-only property required
4Declare method requirementfunc drive()Method drive() required
5Close protocol declaration}Protocol Vehicle fully declared
💡 Protocol declaration ends after closing brace '}'
Variable Tracker
ElementStartAfter Step 2After Step 3After Step 4Final
Protocol NamenullVehicleVehicleVehicleVehicle
PropertiesnullnullnumberOfWheels (read-only)numberOfWheels (read-only)numberOfWheels (read-only)
Methodsnullnullnulldrive()drive()
Key Moments - 2 Insights
Why do we use { get } after the property declaration?
The { get } means the property must be readable (a getter), but it does not have to be writable. See execution_table step 3.
Can protocols contain code implementations inside?
No, protocols only declare requirements (like properties and methods), but do not provide code. This is shown in execution_table steps 3 and 4.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is declared at step 3?
AA read-only property requirement
BA method implementation
CThe protocol name
DClosing the protocol
💡 Hint
Check the 'Code Part' and 'Result' columns at step 3 in execution_table
At which step is the protocol name defined?
AStep 1
BStep 2
CStep 4
DStep 5
💡 Hint
Look at the 'Action' and 'Code Part' columns in execution_table
If we add { get set } to the property, how would variable_tracker change?
AProtocol name would change
BMethods would change
CProperties would be writable and readable
DNo change at all
💡 Hint
Refer to variable_tracker row 'Properties' and understand { get set } means read and write
Concept Snapshot
protocol ProtocolName {
    var propertyName: Type { get / get set }
    func methodName()
}
- Use 'protocol' keyword to declare
- Define required properties and methods
- Properties can be read-only ({ get }) or read-write ({ get set })
Full Transcript
This visual trace shows how to declare a protocol in Swift. First, write the keyword 'protocol', then name your protocol. Next, declare required properties with { get } to indicate read-only or { get set } for read-write. Then declare required methods without implementation. Finally, close the declaration with a brace. Protocols only specify what is required, not how it works.

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