Пишем свое простое новостное приложение на swift (часть 1)
В этом посте я бы хотел поделиться своим опытом написания простого новостного приложения, которое общается с сервером по адресу newsapi.org. Само приложение можно найти здесь. В данной части будет разобрана подготовка проекта, сторибордов и общие архитектурные вопросы.
Изначально я ставил себе задачу разобраться с MVVM паттерном на практике, поэтому в качестве архитектуры будет использоваться именно он. Про него было написано много хороших статей: тык, тык и тык.
Теперь стоит обсудить базу разрабатываемого приложения. Какие сервисы в нем будут присутствовать, какие ViewController’ы нужны на первом этапе и как они будут между собой взаимодействовать.
Изначально понадобится только один ViewContrller — назовем его HeadlinesViewController. Он будет наследником UITableViewController. Чтобы его создать, удалим из Main.stroyboard дефолтный контроллер и перетащим на его место Table View Contrller из библиотеки ассетов(cmd+shift+L) Xcod’a.

Теперь необходимо добавить Navigation Controller, который будет помогать перемещаться между последующими контроллерами, которые мы будем добавлять в будущем при необходимости. Это можно сделать с помощью Editor’a в Xcode. Для этого нужно выделить наш TableViewContrller и выбрать опцию Editor->Embed In->Navigation Controller.

После добавления необходимо сделать Navigation Controller первым контроллером при загрузке приложения. Это можно сделать с помощью опции Is Initial View Controller, предварительно выделив Navigation Controller. Также я добавил заголовок NeoNews у Navigation Item, которая появилась после добавления Navigation Controller’a.

Дальше нужно связать наш контроллер из сториборда с кодом. Для этого сначала удалим дефолтный ViewController.swift и создадим отдельную директорию Controllers, куда положим новый файл HeadlinesViewController.swift
В нем создадим класс нашего контроллера:
Как видно, он наследник UITableViewController. Также я добавил приватный метод setupUI(), где мы говорим нашему NavigationBar’у, что хотим использовать большие заголовки. Перед сборкой необходимо не забыть добавить класс HeadlinesViewController’a в настройках сториборда, иначе получим крэш на этапе запуска приложения.

Собираем проект и получаем следующее отображение нашей таблицы:

Теперь заменим цвет NavigationBar. Сейчас он белый, сделаем его для примера серым, а цвет заголовка — белым. Для этого необходимо создать нашу первую сущность менеджера, который будет отвечать за настройки темы. Создадим отдельную директорию Managers, куда положим новый файл ThemeManager.swift
У менеджера темы есть один статический метод, который выполняет необходимую настройку. На самом деле нам бы хватило одной строчки, которая в else, но после выхода ios 13 некоторые вещи изменились, поэтому приходится дополнительно явно создавать объект UINavigationBarAppearance, настраивать его и передавать в объекты UINavigationBar.appearance(). Подробнее о них можно почитать тут.
Также я расширил класс UIColor новым методом RGB() для упрощения настроек цвета. Для этого создадим новую директорию Utils(или ее часто называют Extensions) и положим туда новый файл UIColor+RGB.swift со следующим содержанием:
Как видим, раньше нам бы пришлось создавать объект UIColor с не очень удобным конструктором. Теперь расширив этот класс статическим методом с удобными параметрами в виде цветов R G B, легко получаем готовый объект нужного цвета.
Осталось применить менеджер темы. Для этого откроем файл AppDelegate.swift, который по умолчанию создается в каждом проекте и содержит настройки стейтов всего приложения. И вызовем метод настроек в методе didFinishLaunchingWithOptions:
Теперь при запуске приложения, будет настраиваться наша тема. Посмотрим на результат:

Отлично! Наша тема изменилась. На этом первая часть туториала заканчивается. В следующей части мы создадим WebService для общения и получения новостей с сервера, а также custom cell для их отображения в таблице.
Мои контакты: https://le0nx.github.io/

