Код
#подборки

Must read. 7 свежих статей о Swift

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

g_hosh / shutterstock

Собираем нейронку на Swift с помощью фреймворка Metal Shaders

Зачем читать: если вы интересуетесь нейросетями или вам интересен фреймворк Metal Performance Shaders.

Где читать: на Medium.

Евгений Стефанков — разработчик под iOS и лауреат Swift Student Challenge 2020 и 2021. Он уже давно интересуется нейронками — даже написал статью о том, как собрать нейросеть на Swift с нуля. В своей новой статье он показывает, как сделать ту же нейросеть быстрее с помощью фреймворка Metal Performance Shaders.

Это полноценный пошаговый гайд — весь процесс создания умной сетки разобран детально и скрупулёзно: от необучаемых слоёв до обучения и оценки. В конце Евгений скормил нейронке знаки хираганы — японской слоговой азбуки. Через 10 минут программа уже вовсю классифицировала японские символы — с точностью 75%. С цифрами она справилась ещё лучше — за те же 10 минут точность выросла до 98%.

Фреймворк в несколько раз ускорил создание нейросети по сравнению со сборкой на голом Swift. И хотя нейросеть Евгения поддерживает только классификации, её довольно просто доработать напильником и заставить умничать на других задачах.

Тихий омут диспетчеризации методов в Swift

Зачем читать: чтобы лучше понять, как работает диспетчеризация.

Где читать: на Medium.

Диспетчеризация методов — какая-то тайная магия создателей языков программирования. Благодаря этому волшебству функции вызываются правильно и корректно.

Существуют три главных типа диспетчеризации:

  1. Статическая диспетчеризация — самая простая и быстрая. Она используется только для методов, которые не могут быть переопределены: Swift не тратит время на выбор нужного варианта. Явно задать статическую диспетчеризацию можно с помощью слов static и final.
  2. Диспетчеризация с помощью координирующей таблицы (vtable) используется для ссылочных типов и помогает сохранить наследование. Работает такая диспетчеризация относительно просто: генерируется таблица с правилами — в них написано, когда и какие версии одного и того же метода запускать.
  3. Диспетчеризация сообщением. У диспетчеризации таблицей есть недостаток: имплементации метода могут меняться и добавляться во время выполнения, так что таблица, созданная во время компиляции, может оказаться неверной. Диспетчеризация сообщением решает эту проблему, создавая новую таблицу уже во время выполнения.

Основная часть статьи — подробный гайд по типам диспетчеризации, однако автор не поскупился и бонусом накинул инструкции по работе с командами dynamic и @objc, а также с SIL-кодом.

Создание Firebase API на Swift

Зачем читать: чтобы узнать о более эффективном подходе к работе с Firebase.

Где читать: на Medium.

При работе с Firebase чаще всего создаётся специальный класс, который занимается созданием, чтением, модификацией и удалением (CRUD) объектов для репозитория. Каждый раз, когда появляется какой-то новый тип данных, нужно обновлять этот класс, дублировать все команды для нового типа. Из-за этого возникает много «рутинного» шаблонного кода.

Более эффективное решение — создать базовый бэкенд-класс с помощью обобщений. Он займётся всеми новыми классами, которые пройдут фильтр. В статье разобрана минималистичная версия приложения с бэкенд-API, которую можно использовать в качестве шаблона для своих аппок под iOS.

Property Wrappers в Swift: что это такое?

Зачем читать: чтобы глубоко разобраться в property wrappers.

Где читать: в блоге SwiftLee.

Property wrappers, или обёртки свойств, — довольно новое включение в Swift, которое позволяет значительно уменьшить количество шаблонного кода. Это своего рода дополнительный слой для объекта, который определяет поведение его свойств.

Автор статьи, Антуан ван дер Ли, — iOS-разработчик с многолетним стажем. Он объясняет, что такое property wrappers, и приводит понятные примеры.

В каких задачах помогут property wrappers:

  • уменьшить количество шаблонного кода;
  • эффективнее работать со свойствами;
  • удобно получать и присваивать значения;
  • добавлять новые свойства;
  • работать с прогнозируемым значением, основанном на обёрнутом значении;
  • получать доступ к приватным свойствам.

В статье есть примеры для всех этих возможностей и хранения опционалов.

Введение в функциональное реактивное программирование

Зачем читать: чтобы узнать о новой парадигме программирования и попробовать её в Swift.

Где читать: на Flexiple.

Что такое функциональное реактивное программирование?

Вкратце: это комбинация функционального и реактивного программирования. В нём часто используются функции высшего порядка.

А что такое функциональное программирование?

Это парадигма программирования, в основе которой лежат математические функции. Главное в этой парадигме — это скорее вычисление результата, а не пошаговые инструкции к действию.

И тогда в чём смысл реактивного программирования?

Это программирование с асинхронными потоками данных.

А что такое поток?

Поток — это упорядоченная во времени последовательность событий. По сути, в реактивном программировании всё: переменные, свойства, структуры данных — это потоки.

Под Swift написаны две классные библиотеки для реактивного программирования: RxSwift и RxCocoa. Первая более популярна, поэтому автор в основном говорит о ней.

Некоторые понятия RxSwift

  • Наблюдаемое (Observables) — в этой библиотеке потоки представлены как наблюдаемые последовательности (observable sequences). Такую последовательность можно создать почти для любого объекта.
  • DisposeBag — это что-то вроде сборщика мусора. DisposeBag помогает отписаться от уже ненужной последовательности.
  • Субъекты (Subjects) — особый тип последовательностей, которые можно менять динамически.
  • Привязка (Binding) — популярный оператор для привязки значения одной последовательности к другой.
  • Комбинирование (Combine) — оператор для комбинирования двух последовательностей.

Перечисления в Swift: как избежать проблем

Зачем читать: чтобы эффективнее решать задачи с помощью перечислений.

Где читать: на Swift by Sundell.

Перечисления (enums) очень популярны в Swift: это один из самых полезных элементов, который помогает решить многие проблемы. Но это не панацея и в ряде случаев лучше решить проблему другим способом. Пример такой проблемы — отсутствие значения.

Представьте, что вы кодите приложение для подкастов и добрались до категорий. Логичное решение — создать перечисление всех возможных категорий и добавить к ним категории none и all.

Но есть метод получше: для категории none в Swift существует специальная функция. И если сделать свойство категории опционалом, уже не придётся клепать отдельную категорию none. Плюс так вы сможете использовать все функции опционалов — например, if let. Сплошная выгода :)

А ещё автор рассказывает, как без перечислений запрогать категорию all и исключения из категорий.

Миграция с Core Data на Realm

Зачем читать: если у вас есть приложение на SwiftUI и вы хотите перейти с Core Data на Realm.

Где читать: на Medium.

Переход с Core Data на Realm — достаточно частое явление. Если вы задумываетесь о переходе, то эта статья — для вас. Не стоит волноваться: и Core Data, и Realm работают с данными как с объектами, так что переход будет быстрым и безболезненным. Да, вам придётся внести в код несколько правок, зато вы сможете избавиться от кучи шаблонного кода.

В своей пошаговой инструкции Эндрю Морган рассмотрел два подхода к миграции, описал весь процесс и показал, как удобнее переносить пользовательские данные.

Жизнь можно сделать лучше!
Освойте востребованную профессию, зарабатывайте больше и получайте от работы удовольствие.
Каталог возможностей
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована