Протоколы определяют набор требований (методов, свойств), которым должны соответствовать типы (классы, структуры, перечисления). Они не предоставляют готовой реализации. Классы являются шаблонами для создания объектов, содержащих состояние (свойства) и поведение (методы).
В контексте абстрактных классов (которые в Swift отсутствуют в явном виде):
fatalError или иметь пустую реализацию, ожидая переопределения в подклассах. Состояние (свойства) может быть общим для всех наследников.Основное различие: классы могут предоставлять базовую реализацию и состояние, в то время как протоколы описывают только интерфейс без реализации и состояния. Имитация абстракции через протокол более гибка, так как протокол может быть принят не только классами, но и структурами и перечислениями.