Протокол определяет набор требований к типу (методы, свойства, инициализаторы), но не предоставляет их реализации. Класс может реализовывать один или несколько протоколов.
Абстрактный класс (в Swift это эмулируется через классы с нереализованными методами или через протоколы) представляет собой базовый класс, от которого наследуются другие классы. Он может содержать как абстрактные (нереализованные), так и реализованные методы и свойства.
Отличия:
| Признак | Протокол | Абстрактный класс (эмуляция в Swift) |
|---|---|---|
| Множественное наследование/реализация | Тип может реализовывать множество протоколов | Класс может наследоваться только от одного класса |
| Хранение состояния | Não pode ter stored properties | Pode ter stored properties |
| Реализация методов | Не предоставляет реализации | Может содержать реализованные методы |
| Создание экземпляров | Нельзя создать экземпляр протокола | Можно создать экземпляр абстрактного класса (если нет абстрактных методов, требующих реализации) |