Пишем свое простое новостное приложение на swift (часть 1)

Nefedov Denis
Nov 1 · 3 min read

В этом посте я бы хотел поделиться своим опытом написания простого новостного приложения, которое общается с сервером по адресу newsapi.org. Само приложение можно найти здесь. В данной части будет разобрана подготовка проекта, сторибордов и общие архитектурные вопросы.

Изначально я ставил себе задачу разобраться с MVVM паттерном на практике, поэтому в качестве архитектуры будет использоваться именно он. Про него было написано много хороших статей: тык, тык и тык.

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

Перетаскиваем Table View Controller в наш сториборд.

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

Эмбедим 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/

You gotta get schwifty

Nefedov Denis

Written by

iOS software engineer. UAV engineer in the past.

You gotta get schwifty

Blog about ios and swift development.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade