Создание текстового редактора
Часто разработчики сталкиваются с необходимостью создания тестовых проектов для демонстрации своей компетенции. Одним из наиболее распространённых вариантов тестирования является создание текстового редактора – приложения, подобного блокноту, так как при его разработке можно продемонстрировать как обработку ввода/вывода данных, так и работу с хранилищем.
Итак, рассмотрим в качестве примера разработку приложения, реализующего функционал стандартных “Заметок” для iOS платформы. Среди его основных особенностей можно выделить:
- синхронизацию информации с помощью облачного хранилища;
- функцию форматирования текста;
- а также создание списков с различными маркерами и чек-листов.
Выбор облачного хранилища
Для реализации хранилища, пожалуй, наиболее оптимальным решением является использование базы данных Cloud Firestore. Эта NoSQL база, разработанная компанией Google, обеспечивает синхронизацию данных, кэширование и работу в условиях нестабильного интернет соединения или в оффлайн режиме. Такой подход позволяет сосредоточиться на разработке функционала редактора заметок.
Форматирование списков и чек-листов
Прежде всего, главную сложность при разработке редактора подобного “Заметкам” iOS представляет функция создания форматированных списков и чек-листов. В частности, в нашем случае было нужно реализовать механизм распознавания списков в тексте и элемент интерфейса, выполняющий функции чек-бокса.
Так, для обработки текстовых данных используется подкласс NSTextStorage. Он позволяет реализовать необходимый функционал для работы с форматированными строками – NSMutableAttributedString.
Для форматирования списков было принято решение использовать регулярные выражения. Например, реализованы функции вставки маркеров списка, обнаружения начала нового списка и продолжения существующего.
Для архитектуры приложения был выбран паттерн MVVM. Использовался подкласс UITextView для редактирования вводимого текста до его отображения.
Для редактирования вводимого текста используется NSTextStorage, а также делегат UITextViewDelegate. Он помогает избегать багов, появляющиеся из-за переопределения методов NSTextStorage вместе с использованием автоисправления и автоматической замены строчных букв на заглавные.
Полученный результат можно увидеть на фото ниже. Простой и ненавязчивый дизайн позволяет записывать информацию и создавать маркированные, нумерованные списки и чек-листы.
Как можно увидеть, разработка текстового редактора не представляет из себя сложную задачу. Однако она показывает уровень компетенции разработчика и степень владения основными необходимыми знаниями и навыками.