Вопрос проверяет понимание ролей View и Presenter и их взаимодействия в архитектуре MVP.
В MVP View и Presenter взаимодействуют напрямую через интерфейсы. View передаёт пользовательские события Presenter, а Presenter обрабатывает логику и обновляет View. View обычно реализует протокол, который определяет методы обновления UI. Presenter не знает конкретной реализации View. Это делает код более тестируемым.
Взаимодействие View и Presenter является центральной частью MVP.
Перед рассмотрением деталей важно понять роли:
View — отображение и события
Presenter — логика и управление
View реализует протокол:
protocol UserView: AnyObject {
func show(name: String)
}
Presenter хранит ссылку на View:
class UserPresenter {
weak var view: UserView?
}
View сообщает о действии пользователя
Presenter обрабатывает событие
Presenter обновляет View через протокол
предотвращает retain cycle
View владеет Presenter
MVP строится на явном управлении View со стороны Presenter. Это делает поток данных понятным и контролируемым.