Почему во View в MVP должен быть протокол?
Суть
Presenter в MVP обновляет View, значит, ему нужна ссылка на неё. Если это UIViewController, Presenter:
- импортирует UIKit и тянет за собой весь фреймворк;
- не тестируется без инстанцирования контроллера (а значит, без симулятора и загрузки view);
- привязан к одному конкретному экрану.
Поэтому View описывают протоколом — набором команд, которые Presenter'у реально нужны (show(count:), showError). Это DIP: Presenter (верхний уровень) владеет абстракцией, контроллер (деталь) её реализует.
Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.
Полный ответ — в DevPrep