Привет! Это попытка реализовать неожиданно пришедшую в мою голову идею. Я хочу разработать простое приложение и описывать этапы его разработки тут.
Тут нужно сделать ремарку. Это ни в коем случае не гайд к действию, а просто мои мысли. Не, ну вы можете, конечно, использовать эту статью как гайд, но я могу и, скорее всего, буду совершать кучу ошибок, исправлений и тд. А может и проект снесу и начну сначала. В этом и весь прикол. Считайте этот канал в дзене публичным дневником, куда я просто записываю свой процесс.
Зачем? Да просто интересно. Если хорошо пойдет, то буду описывать и приложения посложнее. К тому же написание статей позволит лучше проводить самоанализ и развиваться.
Начну с простого приложения, а именно — список дел. Если ограничиться простым функционалом типа «Добавил дело — удалил дело», то разработка займет совсем немного времени. Поэтому немного усложним доп функциями в виде настройки каждого дела.
В моем распоряжении Macbook Air 13' early 2015 с 4 гигами оперативки. В купе с Xcode процесс становится чуть ли не адом, потому что зависает все подряд. Это довольно странно, если учесть, что Apple — огромная корпорация с огромными ресурсами, но IDE у них одна из худших, где я работал. Хуже только Visual Studio от Microsoft :)
Думал использовать в качестве альтернативы AppCode от JetBrains, но при попытке собрать приложение открывается Xcode, и... дальше вы уже знаете.
Все время нам будет сопутствовать документация от Apple, которая встроена в Xcode. Еще эту документацию можно найти по ссылке.
Ладно, приступим. Создаем проект в Xcode
Использую UIKit, а не SwiftUI, поэтому в качестве интерфейса выбираю Storyboard. Ставлю галку на Core Data. Этот фреймворк позволяет хранить данные после закрытия приложения. Тесты писать пока не буду. В будущем добавлю, если нужно будет.
Нужно понимать, что поля создания проекта нужны только для начального набора файлов в самом проекте. Всегда можно добавить еще файлы или убрать ненужные.
Дальше нас переносит на первоначальные настройки приложения.
Приложение будет только для айфона с iOS 14.3 или новее. Только в портретном режиме
Что значит Main interface, пока точно не знаю, но предполагаю, что это интерфейс, от которого другие интерфейсы будут наследовать все выложенные view
Собственно, первоначальные файлы выглядят так
Немного теории. В классических приложениях используется паттерн проектирования MVC, или model-view-conroller, или модель-представление (отображение)-контроллер. Он позволяет отделить данные от их представления, вставив между ними контроллер. В документации есть отличная схема, показывающая отношения между объектами
Естественно, MVC не единственный паттерн, который можно использовать в приложении. Чаще используют производные от этого паттерна. Но мы не будем :)
В первую очередь открываю Main.storyboard и увидим белый экран, с которым столкнется пользователь, когда запустит приложение.
В стандартной библиотеке UIKit есть три вида контроллера отображения контента:
- UIViewConroller — область, где можно как угодно располагать элементы
- UICollectionViewConroller — отображение в виде ячеек в большой таблице
- UITableViewController — отображение в виде списка (то, что нам нужно)
Конечно, можно создавать кастомные отображения, но нам это не нужно.
Пока тут ничего не трогаю. Создам новый Swift файл и назову его TaskListTableViewController. Название достаточно длинное, но оно четко отражает, зачем этот файл нужен. Он будет управлять самим списком дел с помощью TableViewController.
Сразу создаю класс с тем же именем и наследую его от UITableViewController — одним из основных контроллеров. Так мы кастомный контроллер, который умеет все то же, что и классический контроллер.
Метод viewDidLoad(), который прописал сразу, автоматически вызывается, когда представление, которым управляет наш контроллер, загружается в память телефона. Внутри нужно прописывать super.viewDidLoad(), чтобы тот же метод выполнился у класса UITableViewController, от которого мы наследуем наш класс.
Грубо говоря, это можно представить так: нажали на кнопку —> Представление загрузилось в память —> Выполняется тот код, который прописан в методе viewDidLoad() —> Представление появляется на экране
Также есть методы viewDidAppear() и viewWillAppear(), которые позволяют выполнить какой-то код после или перед появлением представления на экране
Файл ViewController.swift нам не нужен, поэтому смело его удаляем. Далее переходим в Main.storyboard, и там тоже удаляем ViewController. Затем жмем на + в правом верхнем углу, в поиске пишем TableViewController и перетаскиваем его на экран. В конечном счете все выглядит так
Как видим, просто белый экран заменился на TableView с Prototype Cells наверху и Prototype Content чуть ниже середины. В чем прикол?
Prototype Cells показывает, как будет выглядеть каждая ячейка списка.
Prototype Content — что мы будем отображать под всеми ячейками, будь их 0, 1, 5, 10 и тд.
Думаю, на этом закончим статью. Пока что справляюсь без документации, потому что уже читал эти моменты до этого. Но дальше придется очень часто к ней обращаться. А еще к stackoverflow и всему тому подобному.
Кстати, исходники всего проекта можете найти по ссылке: https://github.com/JoelColbeck/DailyTask
Подписывайтесь! Постараюсь писать дальше и интереснее.
Буду рад любым комментариям, кроме хейтерских :)