Очень распространенное требование в приложениях iOS - проверить, вошел ли пользователь в систему или нет. В приложении с вкладками элементы вкладок могут быть видны пользователю, но содержимое не отображается, пока пользователь не войдет в систему.

На скриншоте ниже предполагается, что Мои квитанции и Мои счета являются защищенными вкладками. Это означает, что если пользователь не вошел в систему, то при выборе одной из этих вкладок пользователю предоставляется экран входа в систему.

Наиболее очевидное решение - поместить код проверки в соответствующие контроллеры представления элементов вкладки. Вот реализация MyReceiptsViewController.

Это будет работать нормально, но теперь мы должны повторить тот же код для MyBillsViewController и всех других контроллеров, которые должны отображать экран входа в систему, прежде чем пользователь сможет их просмотреть. Давайте посмотрим, как мы можем сделать его намного лучше, используя расширение протокола.

Протокол LoginHandler

Протокол LoginHandler состоит из единственной функции, называемой validate. Эта функция отвечает за определение, вошел ли пользователь в систему в данный момент или нет.

Мы расширили протокол LoginHandler, чтобы предоставить реализацию по умолчанию, как показано ниже:

Фактическая реализация функции проверки сейчас не важна, поэтому мы просто вернули false, указывая, что пользователь не вошел в систему.

Теперь каждый контроллер, которому необходимо проверить, вошел ли пользователь в систему или нет, будет использовать протокол LoginHandler, как показано ниже:

Нам все еще нужно вызвать функцию проверки. Лучшее место - когда выбран элемент TabBar.

BaseTabBarController

Вместо того, чтобы возлагать ответственность за отображение LoginViewController на отдельные контроллеры представления, мы создали базовый TabBarController, который будет обрабатывать выбор элементов TabBar.

Мы проверяем, соответствует ли контроллер LoginHandler, если нет, просто возвращаем true. Если контроллер соответствует LoginHandler, мы вызываем функцию проверки. Если проверка возвращает false, мы, наконец, показываем пользователю LoginViewController, позволяя ему войти в приложение.

Если вам понравился этот пост, возможно, вас заинтересует мой курс «Полное руководство по бережливым контроллерам в iOS». Курс охватывает множество полезных архитектурных шаблонов для создания лучших приложений для iOS. Получите скидку 74%, перейдя по следующей ссылке:

Https://www.udemy.com/a-complete-guide-to-lean-controllers-in-ios/?couponCode=MAKEMELEAN