Привет, Хабр. Перевод подготовлен в рамках онлайн-курса "iOS Developer. Basic".Приглашаем всех желающих на бесплатный двухдневный интенсив «Создание простейшего приложения без единой строчки кода». В первый день узнаем: 1. Что такое XCode?2. Как "рисуются экраны"3. Добавим на экраны кнопки и поля ввода. Создадим экран авторизации.4. Создадим второй экран нашего приложения и добавим переход на него из окна авторизации. Зарегистрироваться можно здесь. Добавьте в Swift свою собственную изюминку Давайте будем честными. Фреймворки Swift и Apple не обладают всей функциональностью, необходимой при создании лучшего программного обеспечения для устройств Apple. К счастью, Swift поддерживает расширения, чтобы мы могли добавлять недостающие части, необходимые для более удобной работы. Если вы новичок в Swift, пожалуйста, обратитесь к документации, чтобы узнать больше о Расширениях перед тем, как продолжить. В этой статье я сосредоточусь на расширениях, которые добавляют дополнительные функциональные возможности к существующим типам. Расширения также могут добавлять функции по умолчанию для протоколов, добавлять ограничения для типов протоколов и многое другое. При создании собственных расширений я бы порекомендовал создать несколько юнит-тестов для проверки их выполнения, чтобы удостовериться, что вы получаете желаемый результат.  Стремясь к тому, чтобы содержание ниже было относительно кратким, я не включил в описание наши юнит-тесты. Вы можете найти Xcode Playground, используемый в этой статье, на моей странице GitHub. Вот только 10 из многих расширений, которые мы используем в Livefront. Вместо того, чтобы не забывать устанавливать translatesAutoresizingMaskIntoConstraints в false, добавлять отображение в родительское представление и устанавливать все индивидуальные ограничения, этот хелпер-метод выполнит все эти действия за вас. Этот метод позволяет установить верхние, передние, задние и нижние ограничения для родительского представления. Если вы опустите один из параметров ограничения, ограничение будет иметь нулевое значение, прикрепляя отображение к краю родительского представления. Чтобы полностью закрыть родительское представление, опустите все параметры ограничений. API REST обычно возвращает строку даты в часовом поясе UTC. Вышеуказанный статический метод позволяет преобразовать строку в объект Date. Если у вас возникли проблемы с этим расширением в вашем собственном проекте, убедитесь, что dateFormat соответствует формату строки даты, которую вы получаете. Этот хелпер-метод очень удобен, когда у вас есть несколько URL в заданной строке. Я бы настоятельно рекомендовал написать несколько юнит-тестов, чтобы убедиться, что этот метод извлекает предполагаемые URL-адреса для вашего конкретного JSON-ответа. Есть несколько шагов, которые должны быть выполнены при удалении отображений из UIStackView, такие как удаление их из самого отображения стека, деактивация любых ограничений, и полное удаление из родительского отображения. Этот хелпер-метод позаботится обо всех этих шагах за вас. Это одна из тех особенностей, которые должны быть включены в Bundle. Вместо того, чтобы пытаться запомнить непонятный ключ словаря, эти вычисляемые свойства помогут в извлечении версии приложения и номера сборки. Многие приложения включают номер версии в меню настроек. Здесь все довольно прямолинейно. Метод вернет предыдущий год в виде Integer. Запомнить, какие свойства нужно установить для UIStackView, может быть непросто. Этот удобный инициализатор включает общие свойства в качестве своих параметров. Инициализатор также устанавливает translatesAutoresizingMaskIntoConstraints в false для каждого из представлений. Этот метод извлекает шестнадцатеричное значение UIColor и возвращает его в виде String. Это может быть очень полезно, если вы хотите сохранить и запомнить значение цвета для пользователя. Таким образом, вам нужно сохранить только шестнадцатеричную строку вместо трех целочисленных значений RGB. UIColors, такие как .label, .systemBlue и т.д., автоматически настраиваются, когда пользователь переключается между светлым и темным режимом, но вы может быть захотите добавить дополнительные функции, когда пользователь переключает внешний вид устройства. Это вычисляемое свойство позволит вам проверить, какой внешний вид активен, чтобы вы могли соответствующим образом отреагировать. Наконец, в UICollectionView добавлен метод, который возвращает последний допустимый indexPath. Это еще одна из тех функций, которая, кажется, уже должна существовать в UIKit. Хотя это может быть достигнуто путем подсчета количества элементов в collectionView и вычитания одного в контроллере представления; добавление его через расширение немного безопаснее. Я бы сказал, что практически невозможно создать проект без добавления хотя бы одного расширения. Добавление функциональности с помощью расширений делает Swift более мощным и позволяет создавать новые функции безопасным способом. Я советую вам поискать в Интернете "Расширения Swift" и получить удовлетворение от всех творческих решений, которые придумали наши коллеги-разработчики. Не стесняйтесь поделиться своим любимым расширением (расширениями) в комментарии ниже.  Ресурсы: Расширения протокола Расширения Swift Ограничения типов с помощью расширений Узнать подробнее о курсе "iOS Developer. Basic" Участвовать в интенсиве «Создание простейшего приложения без единой строчки кода»  Редактор