Когда разрабатываешь iOS-продукты, есть несколько ключевых факторов, которые делают код более читабельным и эффективным. Я всегда пытаются помнить о них и вам советую. Swift — это современный язык программирования, и он поддерживает многие современные концепции, оставаясь при этом простым.

Вот те вещи, о которых вы не должны забывать, если хотите сделать ваш swift-код лучше.

1. Используйте протоколы

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

Вот несколько примеров, когда без протоколов не обойтись:

  • чтобы модальное окно сообщало что-либо компоненту, который его представил;
  • чтобы принять одинаковое поведение на нескольких UIViewControllers или в целом между Cocoa Touch Classes;
  • чтобы запустить событие из UITableCell в родительском UIViewControllers.

Это просто примеры, но как вы могли заметить, мы рассмотрели одни из самых популярных требований в программировании для iOS.

2. Рефакторинг и улучшение читаемости

С приходом Xcode 11 рефакторинг улучшился в значительной степени. Я обнаружил, что новый Xcode стал более доступным во время рефакторинга, благодаря чему теперь мне комфортно переименовывать классы, ссылки и методы. Очень часто бывало, когда я думал, будто имя подходит для ссылки, а позже решал переименовывать ее. Xcode никогда не блистал, но с приходом Xcode 11 я считаю его более надежным. Просто используйте его!

3. Используйте метки

Я полюбил метки со времен Objective-C. Когда контроллеры заполняются сотнями строк кода (или тысячами), метки становятся жизненно необходимой штукой. Разделение и управление частями кода с помощью меток имеет огромное значение и ускоряет навигацию по коду. У Xcode 11 есть навигатор по коду на правой боковой панели, который поможет вам использовать ваши метки. Это еще одна причина использовать метки.

4. Выбирайте программную навигацию, а не раскадровку

Раскадровки (storyboards) великолепны, и я использую их с тех пор, как они впервые появились в Xcode. Но когда ваше приложение начинает расти и вам приходится иметь дело с десятками ViewController, управление и обработка навигации с помощью кода становятся более доступными и эффективными, чем с Segues и Storyboards. Более того, программная навигация дает вам больше контроля над общими параметрами и конкретным поведением во время навигации. Она также поможет вам избежать превращения вашей раскадровки в хаос.

5. Интегрируйте популярные библиотеки в ваш проект

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

  • HTTP-уровень: Alamofire;
  • библиотеку обработки изображений, например Alamofire image или Kingfisher;
  • помощник автоматической раскладки для раскопок нативной системы Swift, которая программно зла, вроде Snapkit;
  • UI-преимущества: HUDs, макеты CollectionView, библиотеки цветов или градиентов и тому подобное.

Но важнее обновлять модули и избегать библиотек с низким рейтингом — они попросту создают больше ошибок.

6. Используйте расширения и систематизируйте их, создавая свои библиотеки

Я люблю расширения Swift. С Objective-C мне всегда приходилось создавать подклассы. Не то чтобы это было неправильным —  применение подклассов не является ошибкой, если все сделано правильно. Но расширения Swift позволяют вам интегрировать простые методы в общие классы без выполнения чего-либо сложного и с простым синтаксисом. А если этого недостаточно, с помощью @IBDesignable вы даже можете поддерживать реализации раскадровок, существует целый набор расширений. Я люблю писать короткие методы для выполнения простых задач со строками, кнопками и другими классами. Использовать расширения настолько круто, что вы можете злоупотреблять ими. В этом нет ничего плохого, но не забудьте организовать расширения в отдельные файлы, чтобы их было удобно читать.

7. Используйте Container Views, когда это возможно

При современных и сложных требованиях к пользовательскому интерфейсу вам часто приходится интегрировать содержимое табов, аккордеонов, перелистываемых макетов, постраничного контента и так далее. Container Views возникают не сразу и требуют некоторого времени для написания кода, но их внедрение определенно того стоит — вы всегда будете работать с повторно используемыми контроллерами.

8. Держите ключевые компоненты UI на видном месте

Иногда интерфейсы становятся проблемой. Я сталкивался с этим много раз, когда разрабатывал приложения, которые объединяют множество функций. К счастью, со мной работал эксперт по UI / UX, который советовал мне, как правильно проектировать интерфейс. Как разработчики вы должны помнить о нескольких вещах.

Во-первых, не усложняйте навигацию. Никогда не используйте одно модальное окно поверх другого, не добавляйте несколько компонентов в UINavigationController, если нет простого способа вернуться домой или отменить действия. Используйте вместо этого UITabBarControllers, боковые меню и аналогичные подходы для упрощения.

Во-вторых, по возможности старайтесь использовать ввод в верхней части экрана. Да, пользователя можно заставить растянуть палец, чтобы сфокусироваться на нем, но всегда лучше реализовать UIScrollView и управлять прокруткой, чтобы клавиатура не закрывала ввод.

9. Используйте уведомления

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

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

10. Используйте параметр sender в действиях событий

Последний совет, который я хочу дать, чтобы помочь вам стать хорошим Swift-разработчиком, — используйте отправителей. Каждый реализованный метод или селектор, отвечающий на события, например @IBActions, дает вам возможность узнать, кто инициировал это событие. В общем случае рассмотрите возможность использования нескольких кнопок с похожим поведением, реагирующих почти на одно и то же действие. Просто подключите все UIButton к одному и тому же @IBAction и используйте sender, чтобы выяснить, кто из них вызвал событие, и сделайте правильную реализацию для конкретно этого поведения. Более того, используйте теги в элементах пользовательского интерфейса для их идентификации, а не анализируйте их заголовок или что-то подобное, потому что он будет зависеть от локализации.

Заключение

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

Перевод статьи: 10 Tips to be a Good Swift Developer