Часть 2 находится здесь

Привет, ребята, я создатель Todo Rugby, приложения, разработанного для предоставления информации болельщикам и новостей о матчах, матчах, турнирах и командах. Я начал разрабатывать его полтора года назад и запустил 13 июня 2016 года. В тот момент я написал его на Objective-C, потому что это был мой основной язык для разработки приложений для iOS, и кривая обучения Swift меня немного раздражала. для меня. Я был неправ.

Сегодня я начинаю серию публикаций о том, как я пишу с нуля одно и то же приложение на Swift, с какими проблемами я сталкиваюсь, какие решения я принимаю и почему вы все должны подумать о том, чтобы сделать то же самое, или, по крайней мере, начать с ним интеграцию и разработку новых функций. В следующих постах вы сможете увидеть мой прогресс и то, как быстро я его продвигаю.

Одна из основных причин, по которой я не начал раньше, заключалась в том, что с более новыми версиями Swift вам приходилось преобразовывать всю кодовую базу в новый синтаксис, что было слишком утомительно и было головной болью для всех разработчиков. Со Swift 4 код, который вы пишете сегодня, не изменится в будущих версиях (надеюсь). Частично это связано с тем, что Swift получил большую поддержку со стороны сообщества (42 КБ на Github на момент написания этой статьи). Итак, начнем с этого.

С чего мне начать?

Каждый раз, когда разработчик начинает новый проект, из его головы закипает масса идей и кучка кода. Это потому, что мы обычно думаем быстрее, чем пишем код.

Прежде всего, мне нравится начинать кодировать базовую структуру и скелет, который для меня является навигацией. После удаления раскадровки (мне она не нравится) мне нужно закодировать инициализацию окна:

Не забудьте удалить главный интерфейс в настройках цели:

⌘ + R и вуаля. Первый шаг долгого пути сделан.

Какао-стручки

Вторым шагом на этом пути является интеграция, IMO, лучшего менеджера зависимостей для iOS: CocoaPods. Я большой поклонник того, чтобы не изобретать велосипед, и когда дело доходит до кодирования, использование хорошо протестированной, документированной и поддерживаемой библиотеки намного лучше, чем ее программирование самостоятельно. Итак, давайте начнем его установку, запустив на вашей консоли pod init. Здесь я не рассказываю, как управлять своим Podfile или как устанавливать зависимости.

Однако стоит упомянуть несколько библиотек:

  • Localize-Swift: помощник во всех ваших проблемах с локализацией.
  • R.swift: это одна из лучших библиотек, разработанных для экосистемы iOS. Это дает вам возможность получать автозаполненные ресурсы со строгой типизацией, которые существуют с самого начала Android.
  • SnapKit: лучшая программная библиотека для просмотра макетов, которая уже существовала на Objective-C, она доступна и для Swift, и это потрясающе!

Менеджер навигации

Третий шаг в этом посте касается синглтона, который должен существовать в каждом приложении, и я люблю называть его NavigationManager. Как и следовало ожидать, мы должны сделать его синглтоном. Но как сделать синглтон на Swift? Вот как мы писали синглтоны на Objective-C:

Теперь, немного погуглив, я нахожу способ закодировать однострочный (или два) синглтон на Swift:

Итак, теперь единственное, что нам нужно сделать на AppDelegate, - это вызвать NavigationManager.sharedInstance.start(). Вот и все.

Ящик и вкладки

Если вы загрузите Todo Rugby из AppStore, вы заметите, что в нем есть два типа шаблонов навигации: ящик и вкладки. Причина, по которой я принял это решение, проста. Мне нужен был способ показать пользователю доступные турниры, а также перемещаться по информации о каждом турнире:

Выдвижной ящик

Итак, чтобы воспроизвести это, я собираюсь установить ту же библиотеку, что и в Objective-C: MMDrawerController.

TabBarController

Второе, что мне нужно, это создать подкласс хорошо известного UITabBarController. Мне нравится это делать по нескольким причинам:

  • Этот класс знает, какая вкладка выбрана, и классы на каждой вкладке.
  • Удалите код из классов, в которых нет необходимости (например, NavigationManager).

Заверните

Как только у меня появятся эти два класса, давайте создадим ту же навигацию:

Как только мы получим это, приложение должно выглядеть так:

Это конец первой части постов. Я добавлю новые, рассказывающие о моем прогрессе, включая HTTP-запросы и обработку модели.

До следующего!