Pull to refresh
-4
2.4
Send message

Бинарное дерево поиска в Swift

Level of difficultyEasy
Reading time10 min
Views4.5K

Вы когда‑нибудь задумывались, почему результаты поиска файлов появляются так быстро? В этой статье мы рассмотрим удивительную структуру данных, известную как двоичное дерево (бинарное дерево), и узнаем, как именно она позволяет достичь такой быстрой обработки и поиска.

Читать далее

Доводите свои проекты до конца

Level of difficultyEasy
Reading time6 min
Views29K

Браться за новый проект всегда интересно и волнительно. Возможности безграничны. Нет никакого легаси-кода, тянущего ко дну; на этот раз мы будем принимать только хорошие решения! Начало любого проекта всегда характеризуется вдохновенной продуктивностью. Предстоит ещё так многое сделать. Как можно что-то не сделать даже за такое короткое время? Пограничных случаев не существует. Все дороги доставляют удовольствие. Нет ни тяжёлых решений, ни компромиссов, ни пользователей, ни клиентов. Только вы и бесконечный холст.

Но рано или поздно вдохновение сменяется чем-то больше похожим на… работу. На рутину. Но ведь так будет только с этим проектом, правда? Вы потеряли интерес. Страсть ушла. Он уже не такой интересный, как вы думали. Осталось сделать только самое «скучное».

У вас появляется новая идея, и вы думаете, что эту-то уж точно реализуете!

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

Но не волнуйтесь, вы не один. На самом деле, вы, скорее, в большинстве! Многие люди мечтают создавать что-то великое, но никак не могут начать. Из тех немногих, кто начинает, очень немногие заканчивают. И эти несколько людей знают чувство глубокого удовлетворения от того, что видят готовый результат своей работы. Это удовлетворение намного глубже, чем эйфория начала проекта.
Читать дальше →

Макросы в Swift

Level of difficultyMedium
Reading time9 min
Views8.2K

Всем привет! Меня зовут Никита Тархов, я iOS‑разработчик студии CleverPumpkin. Сегодня поговорим про макросы: что это такое, зачем нужны и где они применяются.

Читать далее

Изнутри: Swift макрос — #Preview

Level of difficultyMedium
Reading time5 min
Views4.7K

Макрос #Preview в языке Swift предоставляет удобный способ создания и предварительного просмотра компонентов пользовательского интерфейса. Он позволяет разработчикам быстро и легко создавать превью для своих View, чтобы визуально оценить, как они выглядят и взаимодействуют.

Сейчас доступно много информации о том, как писать макросы, много примеров и на удивление хорошая документация. Сегодня мы будем не создавать свой макрос, а подробно рассмотрим приватные макросы, предоставляемые Apple, а именно #Preview.

Читать далее

Swift 5.9. Что нового?

Reading time28 min
Views7K

Хотя Swift 6 уже не за горами, Apple продолжает добавлять новые и улучшенные функции в текущую версию Swift 5.x.

Swift 5.9 - это новый большой релиз, который включает в себя ряд улучшений и новых функций. К ним относятся упрощенные способы работы с операторами if и switch, макросы (то есть код, который может генерировать или трансформировать другой код), некопируемые типы (это новая функция, которая предотвращает копирование объектов определенного типа), кастомные исполнители акторов (что связано с моделью конкурентного программирования в Swift) и многое другое.

В этой статье разберем самые важные изменения этого релиза с примерами кода и пояснениями. Для воспроизведения приведенных в этой статье примеров вам понадобиться последняя версия Xcode 14 или Xcode 15 beta.

Читать далее

Оформление и структурирование классов в Swift

Level of difficultyEasy
Reading time4 min
Views7.2K

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

Читать далее

Императивный UIKit‍ vs Декларативный SwiftUI

Reading time15 min
Views15K

Для разработки iOS-приложений можно использовать два основных фреймворка: UIKit и SwiftUI. Однако при переходе на SwiftUI многие разработчики сталкиваются с трудностями, ведь парадигмы программирования у двух инструментов сильно отличаются.

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

Читать далее

Немного о перечислениях в Swift

Level of difficultyMedium
Reading time9 min
Views6.2K

Не секрет, что на сегодняшний день Swift обладает одними из самых (возможно самыми) функциональными и гибкими в настройке перечислениями. Каждый Swift-разработчик может подтвердить, что работать с ними довольно приятно и удобно. Однако, мало кто задумывается как это устроено внутри. Может показаться, что за подобную функциональность обязательно придётся заплатить либо производительностью, либо памятью, либо размером билда. На самом деле, чтобы максимально избежать подобных издержек, под капотом в языке имеется шесть разных реализаций перечислений.

Читать далее

Многопоточность в iOS-разработке

Level of difficultyMedium
Reading time15 min
Views27K

Здравствуйте, уважаемые читатели Хабра!

Меня зовут Кирилл, я iOS-разработчик приложений Сбера в Студии Олега Чулакова.

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

В этой статье мы разберемся с основами многопоточности и познакомимся с такими инструментами Swift, как Grand Central Dispatch (GCD), OperationQueues, NSLock. А также существующими низкоуровневыми технологиями, такими как pthread и NSThread. Бонусом я расскажу про async/await. Мы обсудим, как эти инструменты помогают управлять асинхронными и параллельными операциями, и посмотрим на некоторые примеры их использования.

Приятного чтения, и давайте начнем наше путешествие в мир многопоточности Swift!

Читать далее

UICollectionViewCompositionalLayout

Reading time10 min
Views7.7K

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

Статья основана на документации apple Implementing Modern Collection Views.

Compositional layouts - это декларативный вид API, который позволяет нам создавать большие макеты путем объединения небольших групп макетов. Compositional layouts имеют иерархию, состоящую из Item, Group, Sections, and Layout.

Чтобы создать любой Compositional layouts, необходимо реализовать следующие четыре класса:

NSCollectionLayoutSize: Размеры ширины и высоты относятся к типу NSCollectionLayoutDimension, которые могут быть определены путем установки доли ширины/высоты макета (в процентах по отношению к его контейнеру) или путем установки абсолютных или расчетных размеров.

NSCollectionLayoutItem: Это ячейка нашего макета, которая отображается на экране в зависимости от размера.

NSCollectionLayoutGroup: содержит NSCollectionLayoutItem в горизонтальной, вертикальной или пользовательской формах.

NSCollectionLayoutSection: используется для инициализации секции путем передачи NSCollectionLayoutGroup. Секции в конечном итоге составляют СompositionalLayout.

Читать далее

Как No-code и генеративный ИИ позволяют за секунды создавать новые сайты

Level of difficultyEasy
Reading time10 min
Views57K

Фронтенд и бекенд — прошлый век?

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

Создание сайта с нуля у опытного разработчика займет в среднем от 100 до 500 часов. Причем если нужен уникальный дизайн и множество картинок, это ещё и выльется в копеечку. Но, оказывается, люди без опыта и знаний уже делают сайты бесплатно, и за 10 минут (или 10 секунд, если используют один из сервисов). Не имея ни малейшего понятия о том, что такое PHP, Python или Java.

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

Читать далее

Современные паттерны навигации в iOS-приложениях

Level of difficultyEasy
Reading time4 min
Views8.5K

По данным 42Matters, каждый месяц в Apple App Store появляется более 30 000 новых приложений. В условиях жесткой конкуренции требования к новым проектам постоянно растут. Чтобы стать популярным, приложению нужно быть полезным, удобным, интуитивно понятным, логичным и просто красивым. Многие из этих качеств зависят от правильно построенной навигации и применения узнаваемых дизайнерских паттернов.

Как настроить навигацию в iOS-приложении так, чтобы пользователю было легко взаимодействовать с интерфейсом? Чтобы помочь UI/UX-дизайнерам и рассказать о самых популярных паттернах навигации для iOS приложений, мы перевели статью от дизайнера интерфейсов Фрэнка Рауша. Фрэнк — преподаватель, эксперт по юзабилити и консультант по дизайну в международных компаниях. В своем блоге он рассказывает, что такое пирамидальная, пошаговая и плоская навигация, а мы делимся этой информацией с русскоязычными дизайнерами. 

Читать далее

Проектируем быстрые действия в iOS: 58 гайдлайнов

Level of difficultyMedium
Reading time7 min
Views2.2K

Быстрые действия – полезная функция приложений в iOS, позволяющая упростить путь клиента и сократить число действий, требуемых для выполнения задач.

Несмотря пользу, применяют ее далеко не все, а у тех, кто применяет, часто есть потенциал для улучшения.

В этой статье – 58 гайдлайнов с лучшими практиками и примерами ошибок, которые лучше не совершать при проектировании быстрых действий в iOS, а также идеи применения быстрых действий в e-commerce приложениях.

Читать далее

О многообразии форм однонаправленных архитектур в Swift

Reading time17 min
Views4.3K

В 2019 году Apple представила миру SwiftUI. И два года спустя появился async/await. Хоть мы и склонны думать, что хорошие архитектуры не должны зависеть от специфик фреймворков, хорошие архитектуры все-таки являются лояльными гражданами тех же самых фреймворков и общей экосистемы. Так… как же SwiftUI и async/await изменили концепцию контейнеров состояний за последние шесть лет? Давайте посмотрим.

Читать далее

Использование Command Line Tool на Swift в iOS проекте

Level of difficultyMedium
Reading time8 min
Views2.7K

Не так давно на проекте возникла необходимость настроить периодическое обновления информации со стороннего сервиса. В моем случае это был файл‑справочник в формате JSON, хранящийся в Bundle приложения, и ещё Info.plist в придачу. Отмечу, что такие файлы нельзя изменять в запущенном iOS приложении. Да и вообще, вызовы напрямую в сторонний сервис уже в рантайме меня не сильно радовали — в случае сбоя загрузки данных у приложения отваливался кусок функциональности.

Как бы вы поступили в этом случае? Вынесли бы кэширование таких файлов на ваш бэк? Таким образом мы бы решили проблему со сторонним нестабильным сервисом, но что делать с Info.plist?

Первое, что приходит в голову — написать Shell‑скрипт. Но это могло привести к проблемам с поддержкой другими iOS разработчиками. Поэтому было принято решение создать утилиту на Swift.

В сети много материала по созданию Command Line Tool на Swift, но мы разберем абстрактный пример создания такой утилиты сразу в связке с iOS проектом.

Читать далее

Swift async/await на примерах

Reading time14 min
Views22K

В предыдущей части мы разобрали преимущества работы с async/await по сравнению с GCD. В этой части мы более подробно рассмотрим ключевые слова async и await (и не только). Разберемся в том, как они работают, что означает "неблокирующее ожидание" и самое главное рассмотрим это все на примерах.

Читать далее

Готовим наши приложения к Swift 6

Level of difficultyMedium
Reading time6 min
Views4.4K

К сожалению, как нам пояснил Дуг Грегор (Doug Gregor) из Swift Language Workgroup, Swift 6 все-таки не успеет увидеть свет в 2023 году. Но знали ли вы, что Apple уже зарелизила некоторые части Swift 6 в версии 5.8? Да, вы не ослышались. Эти части нового Swift поставляются с Xcode 14.3, но они по умолчанию отключены. Они заработают сразу после выхода Swift 6, что может занять еще один год или даже больше.

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

Я решил, что было бы неплохо включить все фичи в моих текущих проектах уже сейчас, чтобы увидеть, есть ли в моей кодовой базе какие-либо критические изменения, о которых мне следует позаботиться. И, конечно же, таким образом я бы смог попробовать некоторые новые фичи, такие как BareSlashRegexLiterals, что дает нам возможность краткой инициализации регулярных выражений с помощью литерального синтаксиса  (/.../).

К счастью, в Swift 5.8 есть легкий универсальный способ активировать все эти опции: нам просто нужно передать в Swift флаг -enable-upcoming-feature, прописав его в OTHER_SWIFT_FLAGS настройках сборки нашего проекта в Xcode. А также нам нужно знать, какие именно фичи нам доступны, но я не смог найти хорошего комплексного обзором (по крайней мер пока). Предложение, в рамках которого был добавлен этот унифицированный способ активации, содержит такой список, но он не обновляется более новыми опциями, добавленными позже, как, например, в SE-0384. Так где же мы можем получить достоверный актуальный список всех поддерживаемых опций?

Читать далее

Во что поработать после работы

Reading time7 min
Views14K

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

Читать далее

Как я разрабатывал кастомный Segmented Control на SwiftUI

Level of difficultyMedium
Reading time6 min
Views7.1K

Системный Segmented Control - это хорошо и удобно. Но когда доходит до его кастомизации, проще написать свой гибкий компонент с нуля. В этой статье история разработки своего segmented сontrol'а, переросшего в отдельную внешнюю зависимость, с ожидаемыми и не очень сложностями.

Читать далее

Как подружить Алису с ChatGPT

Level of difficultyMedium
Reading time6 min
Views74K

О ChatGPT сейчас не говорит только ленивый. Давайте попробуем соединить голосовой помощник Алиса и ChatGPT. Таким образом мы сможем взаимодействовать с ChatGPT с помощью голоса. А он с помощью голоса может нам отвечать. Конечно тут будут ограничения о которых я подробно опишу далее. Данная статья не столько о ChatGPT а о том как писать навыки для Алисы.

Читать далее

Information

Rating
1,266-th
Registered
Activity