Как стать автором
Поиск
Написать публикацию
Обновить
9.62

Swift *

Открытый объектно-ориентированный язык

Сначала показывать
Порог рейтинга
Уровень сложности

Макросы в Swift: Практическое руководство по использованию

Уровень сложностиПростой
Время на прочтение12 мин
Количество просмотров2.4K

Недавно я столкнулся с задачей, которая требовала написания большого объема шаблонного кода. Вспомнив, что в Swift 5.9 появились макросы, созданные специально для генерации шаблонного кода, я решил попробовать их в действии. Ранее я работал с макросами в Objective-C и C++, поэтому ожидал увидеть нечто похожее. Однако, поискав информацию, я понял, что макросы в Swift — это совсем другое, не похожее на то, что я встречал в других языках.

В отличие от макросов в C++ или Objective-C, в Swift нужно писать гораздо больше кода, соблюдая при этом строгие правила оформления. Иначе можно столкнуться с загадочными ошибками компиляции, решение которых не всегда очевидно. Дополнительные трудности возникают из-за того, что многие статьи и видео просто повторяют официальную документацию, не объясняя понятным языком, как именно использовать макросы. Часто вместо этого начинаются сложные рассуждения о структуре AST (Abstract Syntax Tree) или приводятся примеры кода, которые демонстрируют результат работы макроса, но не показывают, как его создать и отладить.

Именно из-за таких трудностей я решил написать эту статью. Её цель — максимально просто, без углубления в теорию, объяснить, как можно уже сегодня начать использовать макросы в Swift. Если вам захочется изучить эту тему подробнее, вы всегда сможете обратиться к официальной документации или материалам с WWDC, где этот вопрос разобран более детально. А если вам понравится моя подача, пишите в комментариях — я постараюсь объяснить сложные моменты в отдельных статьях.

Читать далее

Осторожно, Combine! Откуда берутся утечки памяти, потеря эвентов, нестабильность операторов и что с этим всем делать

Уровень сложностиСредний
Время на прочтение27 мин
Количество просмотров5.4K

Привет, меня зовут Никита, я iOS‑разработчик в Яндекс Диске. В прошлый раз я рассказывал, как мы начали свой путь в SwiftUI. Теперь настало время рассказать ещё об одном фреймворке, который мы затащили в свой проект параллельно со SwiftUI, — Combine.

В этой статье разберу проблемы, с которыми столкнулась наша команда, расскажу, как их исправили, а также к каким выводам после этого пришли. А ещё поделюсь библиотекой с фиксами и экстеншенами к Combine.

Читать далее

История одного модального окна или переходим с UIKit на SwiftUI. Часть 2.1. Неожиданный баг Combine

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров1.1K

В этой статье изначально планировала написать продолжение первой части статьи. А именно показать обещанные ProgressView и SkeletonView. Но тут на моём пути возникло неожиданное препятствие.

Обо всём по порядку.

Мы же понимаем, что просто так оставить View со всем функционалом внутри нельзя. Обычно я накидываю быстрый функционал и UI в одном классе, а затем уже разделяю. Использую MVVM архитектуру. И модальное окно не стало исключением. Проверив, что всё работает во View, я создала ViewModel, сделала её ObservableObject

Читать далее

Как настроить правильное расположение элементов в Android-приложении для арабского языка

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров807

Поддержка языков с направлением текста справа налево (RTL), таких как арабский, — важная часть разработки Android-приложений. C помощью следующих шагов можно легко настроить RTL.

Читать далее

Tuist: добавляем генерацию проекта в текущее приложение

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров2.5K

Знаете, что объединяет всех iOS-разработчиков, работающих над крупными проектами? Все мы когда-то сталкивались с этим старым знакомым — файлом .xcodeproj, который хранит в себе десятки, а то и сотни конфликтов после каждого merge. Мы тоже жили с этой проблемой много лет, пока не нашли решение.

Знакомьтесь, Tuist — инструмент, который кардинально изменил наш подход к управлению проектами. Он не только помогает избежать конфликтов, но и автоматизирует генерацию ключевых компонентов, значительно облегчая команде жизнь.

Если у вас всё еще сохранился этот «реликт прошлого», то, возможно, наш опыт поможет вам наконец-то избавиться от него. Давайте разберемся, как это сделать.

Читать далее

Корутины: stackful vs stackless

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров18K

В этой статье я хочу объяснить разницу между stackless и stackful корутинами: чем они отличаются, какие у них плюсы и минусы, а также в общих чертах рассказать, как в некоторых языках программирования реализована многопоточность.

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

Читать далее

Использование systemd со Swift приложением

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров1.3K

Все приложения на сервере необходимо запускать под управлением какого-либо демона. Возможно, вы уже используете supervisord или systemd.

Эта статья покажет, как упростить вашу жизнь при помощи systemd, интегрировав его напрямую в ваше приложение через SPM-плагин.

Для начала давайте посмотрим, как мы обычно работаем с systemd и что нужно проделать для его настройки на работу с нашим приложением.

Читать далее

История одного модального окна или переходим с UIKit на SwiftUI. Часть 1

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров1.8K

Всем добрый день. Хочу поделиться с вами проблемами постепенного внедрения SwiftUI в приложение, полностью написанное на UIKit, а так же моими вариантами их решения.

Читать далее

Как реализовать спойлер-эффект как в Telegram на Swift?

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров2.3K

Спойлеры стали неотъемлемой частью общения в мессенджерах и социальных сетях. Они позволяют скрывать часть информации до тех пор, пока пользователь не захочет ее увидеть. В Telegram спойлер-эффект сопровождается красивой анимацией рассыпающихся точек. В этой статье мы рассмотрим, как реализовать подобный спойлер-эффект в iOS-приложении на Swift, используя CAEmitterLayer и UITextVie.

Читать далее

Быстрый доступ к VPN в iOS с помощью App Intents

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров4.1K

Привет! Меня зовут Антон Долганов, я iOS-разработчик в компании Контур. Я работаю над инфраструктурными модулями и параллельно поддерживаю наше приложение Контур.Коннект, которое используется для подключения к внутреннему VPN и даёт доступ к корпоративным сервисам.

Недавно мы выпустили обновление Коннекта, добавив поддержку Быстрых команд (Shortcuts). Теперь можно включать и отключать VPN, даже не заходя в приложение. В этой статье я расскажу, как я это реализовал и почему это полезно.

Читать далее

Как ускорить запуск iOS-приложения в 2 раза с помощью Network Instrument

Уровень сложностиСредний
Время на прочтение14 мин
Количество просмотров6K

Приложение соединяет данные из сети с интерфейсом. Про UI сказано и написано немало, а вот сеть говорят меньше всего, хотя именно она влияет на время ожидания ответа пользователем. При этом со стороны разработчика это часто выглядит так: «ну я создал сессию, дёрнул запрос, обработал ошибку, что там ещё может быть?».

Если посмотреть на все запросы со стороны, то появится много вопросов: нужно ли переиспользовать URLSession.shared, почему первые запросы выполняются дольше остальных, как построить мониторинг качества работы сети и т.п.

Мы решили проанализировать наши приложения с помощью Network Instrument и нашли в них десяток разных проблем. В этой статье поделимся нашим опытом и расскажем о том, как найти зоны роста вашего iOS-приложения и использовать их для улучшения пользовательского опыта.

Читать далее

Графы в Swift: Поиск в Глубину и Поиск в Ширину

Уровень сложностиПростой
Время на прочтение13 мин
Количество просмотров2.7K

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

Читать далее

Готовый компонент UI свайп-панели c добавлением scrollView, и других элементов ui. (iOS Swift)

Время на прочтение8 мин
Количество просмотров1.6K

ContainerController компонент пользовательского интерфейса. Это копия свайп-панели из приложения: AppleMaps.

Читать далее

Ближайшие события

Прокачайте свой Swift с @dynamicMemberLookup

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров1.6K

Swift — это мощный язык программирования, который сочетает в себе безопасность типов и выразительность. Однако, несмотря на свою строгую типизацию, язык предоставляет разработчикам возможность использовать динамический доступ к свойствам объекта с помощью атрибута dynamicMemberLookup. Это может быть полезно, например, для работы с динамическими данными или при создании DSL (Domain-Specific Language). С помощью этого атрибута мы можем обращаться к свойствам экземпляра типа, даже если эти свойства явно в нем не определены.

Читать далее

Булевы операции двумерных тел

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров9.4K

В детстве меня всегда завараживали игры с динамическим ландшафтом: The Castle и Worms Armageddon. В то время я не понимал, как реализована эта удивительная механика разрушения и изменения мира. Позже я узнал, что секрет заключался в использовании растровой графики, но интерес к теме не исчез. В этой статье я хочу рассказать о векторном решении аналогичной задачи.

Читать далее

Дружим iPhone и ESP32. Часть 1. ESP Arduino Core

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров4.7K

В данной части статьи я простым языком поведаю вам о том, как написать собственный BLE сервис на микроконтроллере ESP32 для дальнейшего управления непосредственно с iPhone, а так же раскрою пару фишек, благодаря которым вы сохраните себе своё время и нервы.

Читать далее

Как я решал задачу получения доступа к данным банковских приложений на iOS

Время на прочтение5 мин
Количество просмотров4.9K

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

Можно было бы эти категории записывать на листик или куда-то в заметки, но я решил сделать iOS приложение, в котором можно добавлять выбранные категории кешбэка, а они уже будут выводиться в виде виджета.

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

Читать далее

Как встроить распознавание звуков в ваше iOS приложение на Swift с использованием SoundAnalysis

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров591

В мире, где ваш телефон умеет угадывать настроение по плейлисту, почему бы не научить его распознавать звуки вокруг? С помощью фреймворка SoundAnalysis это проще, чем кажется. Мы расскажем, как легко и с минимальными потерями для душевного здоровья интегрировать распознавание звуков в ваше iOS-приложение.

Читать далее

Автоматизация работы с JSON в Swift с помощью Codable

Уровень сложностиСредний
Время на прочтение2 мин
Количество просмотров700

Автоматизация работы с JSON в Swift с помощью Codable

Когда вы работаете с данными в Swift, особенно при взаимодействии с API, вам часто приходится разбирать JSON-ответы и преобразовывать их в структуры данных. Это может быть утомительной и повторяющейся задачей, особенно если у вас есть сложные или вложенные JSON-структуры. Для решения этой проблемы в Swift существует мощная и удобная библиотекаCodable.

Читать далее

Реализуем машинное обучение на сервере с помощью Swift

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров1.5K

В этом руководстве я покажу вам, как работать с моделью машинного обучения на сервере Vapor с помощью Swift.

Ни для кого не секрет, что Apple стремится двигать свою экосистему в сторону извлечения максимальной выгоды путем переноса мощных процессов машинного обучения на устройства пользователей. Core ML предлагает молниеносную производительность и упрощает интеграцию моделей машинного обучения в приложения — от создания до обучения и развертывания моделей. Чтобы лучше понять тонкости работы фреймворка Core ML, рекомендую вам ознакомиться с этим руководством.

Однако в этом бесконечном прогрессе ИИ новые технологии, связанные с генеративными алгоритмами, несколько усложняют ситуацию: зачастую эти модели достаточно тяжелы и требуют значительных затрат ресурсов для работы на устройстве.

Читать далее