Ответ
Протокол определяет интерфейс (требуемые свойства и методы), который должны реализовать соответствующие ему типы (классы, структуры, перечисления).
Пример:
// 1. Объявление протокола
protocol Vehicle {
var numberOfWheels: Int { get }
func startEngine()
}
// 2. Реализация протокола классом
class Car: Vehicle {
let numberOfWheels = 4
func startEngine() {
print("Car engine started")
}
}
// 3. Реализация протокола структурой
struct Bike: Vehicle {
let numberOfWheels = 2
func startEngine() {
print("Bike pedaling started")
}
}
// 4. Использование полиморфизма
let vehicles: [Vehicle] = [Car(), Bike()]
for vehicle in vehicles {
print("Wheels: (vehicle.numberOfWheels)")
vehicle.startEngine()
}
Почему это полезно:
- Полиморфизм: Массив
[Vehicle]может хранить объекты разных типов, но с общим интерфейсом. - Проектирование: Протоколы позволяют определять контракты и абстрагироваться от конкретной реализации.
- Тестирование: Облегчают создание мок-объектов для модульного тестирования.