Можешь объяснить, для чего нужны протоколы в Swift и описать, как классы, структуры и перечисления могут им соответствовать? — ДейлиПреп