MastersAcademy / ios-swift-advanced-2019

Репозиторій з курсів "iOS Swift Advanced" проекту Masters Academy
GNU General Public License v3.0
4 stars 8 forks source link

Homework 005, Dependency Injection by Controlling the World (inspired by Point-Free) #15

Open igorkravchenko opened 4 years ago

igorkravchenko commented 4 years ago

Задание 1

1) Клоним плейграунд и копируем код из него в новый iOS проект под названием MARepos. 2) Приложение должно отображать navigation controller с MA репозиториями, установленного в качестве root view controller-а в window. Создаем новый target с типом iOS Framework и называем его MAReposFramework. 3) Перемещаем весь код нашего приложения (кроме AppDelegate и/или SceneDelegate) в MAReposFramework. 4) Нужно убедиться что все исходники принадлежат target-у MAReposFramework, а не target-у приложения. 5) Необходимо чтобы MAReposFramework был импортипрован в AppDelegate и/или SceneDelegate приложения MARepos чтобы иметь доступ к ReposViewController для создания инстанса ReposViewController. 6) Собираем приложение и убеждаемся, что все работает так же, как и прежде (нужно будет сделать некоторые типы и функции публичными) 7) Создаем iOS playground и перетаскиваем его в проект приложения. 8) Импортируем MAReposFramework, создаем экземпляр ReposViewController и устанавливаем его как live view playground-а. 9) Можно использовать исходный код playground-а в качестве примера. 10) Подменяем Current: live заменяем mock вариантом (нужно объявить статические свойства live и mock для Environment) 11) Теперь страница playground-а может выступать live примером этого экрана. Меняем mock чтобы протестировать разные состояния, чтобы изменения вступили нужно пересобрать MAReposFramework

Задание 2

В приложении есть еще несколько зависимостей которые мы не затронули. Давайте исследуем как их взять под контроль выполнив несколько упражнений: 1) Клиент аналитики использует несколько синглетонов: Bundle.main, UIScreen.main и UIDevice.current. Извлекаем эти зависимости в Environment. Какие есть преимущества контроля этих зависимостей? 2) DateComponentsFormatter может производить разные строки для разных языков и локалей, и по умолчанию в нем установлена локаль устройства.

 Примечание Evironment это то же, что и World упоминаемый в лекции.

MSavisko commented 4 years ago

14 andrey.strib_stribandrey