Swift protocols are a powerful framework for defining a blueprint for methods, properties, and other requirements for tasks or functionalities. They serve as a contract to implement specific properties or methods.
To declare a protocol, use the keyword protocol
, followed by the protocol name:
protocol Greetable {
func greet()
}
Classes, structs, or enums can adopt protocols by listing them after their type name, separated by a comma:
class Person: Greetable {
func greet() {
print("Hello!")
}
}
In this example, Person
must implement the greet
method defined by Greetable
.
Swift enables multiple protocols to be adopted simultaneously, aiding in creating flexible and reusable code.
protocol Nameable {
var name: String { get }
}
struct Employee: Nameable, Greetable {
var name: String
func greet() {
print("Hello, my name is \(name).")
}
}
The Employee
structure conforms to both Nameable
and Greetable
, implementing their required properties and methods.
Protocols can inherit from other protocols, similar to class inheritance. This allows you to create a hierarchy of protocols with specific guidelines:
protocol FullyGreetable: Greetable {
func fullyGreet()
}
struct PolitePerson: FullyGreetable {
func greet() {
print("Good day!")
}
func fullyGreet() {
print("Good day! How can I assist you?")
}
}
Here, FullyGreetable
inherits from Greetable
. Any type conforming to FullyGreetable
must implement both greet
and fullyGreet
methods.
Swift allows you to provide default implementations of methods in protocols using protocol extensions, facilitating extended functionality without impacting existing conforming types:
extension Greetable {
func greet() {
print("Hello from default implementation!")
}
}
Any adopting type that doesn’t implement greet
will use this default implementation.
Protocols in Swift are foundational for creating organized and abstracted code. By defining a clear contract of methods and properties, they allow for the creation of flexible, reusable, and type-safe code structures. As you dive deeper into Swift, mastering protocols will enhance your ability to write clean and efficient applications.
```