Pull to refresh
0
@Aldvsread⁠-⁠only

User

Send message

Проектирование классов на Swift

Reading time12 min
Views7.7K

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

Читать далее
Total votes 1: ↑1 and ↓0+1
Comments16

Tuist: Xcode-проект на стероидах

Reading time9 min
Views16K


Стандартное представление Xcode-проекта сложно назвать комфортным для командной работы. Даже в небольших проектах часто возникают merge-конфликты после изменения состава исходников в разных ветках.


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


Да, ограничения Xcode можно победить, но решением в основном является "винегрет" из сторонних инструментов, заправленный собственными Shell или Ruby скриптами, в которых мало кто разбирается.


Но есть куда более изящное и комплексное решение — Tuist. С ним мы и познакомимся в этой статье.

Читать дальше →
Total votes 14: ↑13 and ↓1+16
Comments8

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

Level of difficultyEasy
Reading time4 min
Views3.5K

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

Читать далее
Rating0
Comments2

Как оценивать свою работу на фрилансе

Reading time19 min
Views6K

Это глава из «Книги нормального фрилансера», в которой я делюсь опытом успешного проектировщика интерфейсов, работающего на себя.

Нужно брать с клиента столько, чтобы он не отвалился.
Где потом найдёшь другого? Лучше зря не рисковать!
Совершай скорее сделку, не продумывай деталей,
Время — деньги, пусть другие тратят время на расчёт.

Одним из самых трудных вопросов, с которыми я столкнулся на фрилансе, стал «Сколько денег взять за эту работу?» Первым клиентом волей случая оказалась компания Telphin, оператор VoIP-телефонии, довольно крупный на 2008 год. От меня требовалось спроектировать новую версию интерфейса кабинета пользователя.

Тогда в оценке я руководствовался такими понятиями, как «сколько бы мне попросить, чтобы клиент не отвалился?», «сколько вообще люди берут за подобную работу?», «за какую сумму я сам готов работать?» Тогда я назвал что-то порядка 30 000 рублей. Для студента невероятно большая сумма…

Читать далее
Total votes 17: ↑17 and ↓0+17
Comments9

Всплывай! Транзишены в iOS

Reading time8 min
Views27K

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


Читать дальше →
Total votes 29: ↑29 and ↓0+29
Comments10

Прости, Rosetta, мы должны расстаться

Reading time8 min
Views8.1K

С релизом Xcode 14.3 Apple убирает поддержку Rosetta и почти прямым текстом говорит разработчикам, что откладывать адаптацию своих проектов под Apple Silicon дальше уже некуда. Сегодня я поделюсь историей про то, с какими сложностями мы столкнулись в нашем основном приложении Циан, и какое стороннее решение помогло нам избавиться от Rosetta.

Читать далее
Total votes 5: ↑5 and ↓0+5
Comments4

Память в Swift от 0 до 1

Reading time10 min
Views81K

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

Читать далее
Total votes 21: ↑20 and ↓1+23
Comments16
Представьте, что у вас есть персональный ассистент, который работает круглые сутки, помогает следить за вашим самочувствием, рассказывает о возможных рисках для здоровья и подбирает индивидуальные рекомендации для физического и психологического благополучия. В Беларуси разрабатывают приложение Flo, которое должно стать таким помощником для женщин, и им уже пользуются 150 млн человек по всему миру. Постепенно к команде разработчиков присоединились люди из Литвы, Нидерландов, Великобритании и США. Под катом — история о том, как сделать целостное приложение о женском здоровье с искусственным интеллектом и вывести его на 1-ю строчку в категории «Здоровье и фитнес».
Читать дальше
Total votes 23: ↑15 and ↓8+22
Comments17

Погружение в Combine: последовательные и объединяющие операторы для улучшения процесса разработки iOS приложений

Reading time8 min
Views7.1K

Добрый день! Я — Иваев Зафар, iOS разработчик в компании Usetech. В этой статье мы узнаем как фреймворк Combine помогает нам разрабатывать функционал приложения с помощью встроенных функций — операторов. В этой статье, мы покроем следующие типы операторов:

1. Последовательные операторы

2. Объединяющие операторы

Читать далее
Total votes 4: ↑4 and ↓0+4
Comments0

Сохранение бизнес-логики в Swift Combine. Часть 1

Reading time6 min
Views3.4K
Дата-ориентированный Combine





Перевод статьи подготовлен специально для студентов продвинутого курса «iOS Разработчик».





В предыдущей серии постов мы успешно построили платформу поверх SwiftUI, с помощью которой вы можете свободно наблюдать последовательности значений, проходящих через publisher Combine.

Мы также создали ряд примеров, демонстрирующих несколько операторов по умолчанию Combine, которые способны изменять и преобразовывать значения в последовательностях, таких filter, map, drop и scan. Кроме того, мы представили еще несколько операторов, которые соединяют (Zip и CombineLatest) или унифицируют (Merge и Append) последовательности.
Читать дальше →
Total votes 10: ↑10 and ↓0+10
Comments0

Современный код для выполнения HTTP запросов в Swift 5 с помощью Combine и применение их в SwiftUI. Часть 2. Hacker News

Reading time15 min
Views5.9K


Hacker News, чей API мы собираемся использовать в этой статье, является социальным сайтом, сфокусированным на компьютерах и предпринимательстве. Если вы с ним ещё не знакомы, вы найдёте там много интересного.



В предыдущих статьях  на примере базы данных фильмов TMDb и агрегатора новостей NewsAPI.org была представлена стратегия применения Combine для формирования HTTP запросов и использования их во View Model для управления UI, спроектированного с помощью SwiftUI. В этой статье мы в точности воспроизведем ту же самую стратегию для разработки приложения, взаимодействующего с агрегатором новостей Hacker News, но добавим работу с «внешним» издателем Timer и для простоты исключим обработку ошибок.

Надо сказать, что выборка статей на ресурсе Hacker News имеет совершенно другую логику, чем в новостном агрегаторе NewsAPI.org, но технология, основанная на выполнении HTTP запросов с помощью Combine, прекрасно показывает свою гибкость и в этой ситуации. Кроме того, информация на сайте Hacker News очень часто обновляется и использование внешнего «издателя» Timer позволит автоматически отслеживать поступающие на сайт новые истории (Story), именно так их называют на этом ресурсе.

API агрегатора новостей Hacker News можно использовать совершенно свободно и не требуется никакой регистрации для аккаунта разработчика. Это здорово, потому что вы можете сразу начать работать над кодом без длительной регистрации, как мы делали это с другими public APIs.
Читать дальше →
Total votes 4: ↑4 and ↓0+4
Comments0

Swift Combine мертв?

Reading time8 min
Views4.5K

Apple представила свой фреймворк Combine на WWDC 2019 вместе с iOS 13, macOS 10.15 и, возможно, что самое главное, SwiftUI. В то время мы все были очень взволнованы тем, что Apple предоставила нам собственное решение для реактивного программирования.

Год спустя, в октябре 2020 года, на форумах Swift появились первые роадмапы Swift Concurrency. И на следующем WWDC в 2021 году у нас уже был первый полный релиз Swift Concurrency… и никаких значимых обновлений для Combine. Перенесемся еще на год вперед к WWDC 2022 и снова никаких серьезных обновлений Combine. В результате всей этой эпопеи разработчики небезосновательно начали размышлять о том, мертв ли ​​Combine, забросила ли его Apple в угоду Swift Concurrency.

- Итак, мертв ли Combine? Мы так не думаем!
-
Полагаемся ли мы на Combine в нашей кодовой базе все больше и больше? Да!
-
Используем ли мы при этом Swift Concurrency? Да!
-
Приведет ли это впоследствии к архитектурным проблемам, о которых мы будем очень сильно сожалеть? Надеюсь, что нет!

Читать далее
Total votes 4: ↑2 and ↓2+1
Comments2

Готовимся к Combine

Reading time11 min
Views15K


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

На летней конференции WWDC Apple представила фреймворк Combine. На первый взгляд, он выглядит как немного более лучшая версия RxSwift. Прежде чем я смогу объяснить, что мне в нём нравится, а что нет, нам нужно понять, какую проблему призван решить Combine.
Читать дальше →
Total votes 31: ↑31 and ↓0+31
Comments1

API для удаленной асинхронной выборки с помощью Apple Combine

Reading time17 min
Views14K


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

Но изучение самого фреймворка Combine на первых порах может показаться не таким уж простым. Дело в том, что основными «игроками» Combine являются такие абстрактные понятия, как «издатели» Publishers, «подписчики» Subscribers и операторы Operators, без которых не удастся продвинуться в понимании логики функционирования Combine. Однако благодаря тому, что Apple предоставляет разработчикам уже готовых «издателей», «подписчиков» и операторов, код, написанный с помощью Combine, оказывается очень компактным и хорошо читаемым.

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


Читать дальше →
Total votes 22: ↑11 and ↓110
Comments8

Combine: часть 1. Погружение в реактивное программирование

Reading time10 min
Views13K

Привет, Хабр! Меня зовут Сергей, я iOS-разработчик в компании SimbirSoft.

Уже наступил 2023 год, а обсуждения на тему выбора инструмента для обработки асинхронных событий не утихают. На сцене привычные колбэки, нотификейшн-центры с «бородатыми» Objective-C-селекторами, разные фреймворки для реактивной разработки, а не так давно Apple представила модный Swift Concurrency.

Combine все больше набирает популярность в продакшене. За счет нативного происхождения у него хороший уровень оптимизации, его легко «склеивать» как с существующими легаси-инструментами, так и с новыми — SwiftUI или async/await.

Пестрый «зоопарк» заставляет задуматься: что выбрать для нового проекта, а что для приложения с многолетней историей?

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

Это первая часть статьи, где мы познакомимся с Combine, сравним его с RxSwift. Материал будет полезен для тех, кто до этого не сталкивался с реактивщиной, а также тем, кто успел поработать с аналогичными инструментами.

Читать далее
Total votes 3: ↑3 and ↓0+3
Comments5

Современный код для выполнения HTTP запросов в Swift 5 с помощью Combine и применение их в SwiftUI. Часть 1

Reading time27 min
Views19K


Выполнение HTTP запросов — это один из самых важных навыков, которые необходимо получить при разработке iOS приложений. В более ранних версиях Swift (до версии 5) вне зависимости от того, формировали ли вы эти запросы «с нуля» или с использование известного фреймворка Alamofire,  вы в конечном итоге получали сложный и запутанный код с callback типа completionHandler: @escaping(Result<T, APIError>) -> Void.

Появление в Swift 5 нового фреймворка функционального реактивного программирования Combine в сочетании с уже существующими URLSession и Codable предоставляет вам все необходимые инструменты для самостоятельного написания очень компактного кода для выборки данных из интернета.

В этой статье в соответствии с концепцией Combine мы будем создавать «издателей» Publisher для выборки данных из интернета, на которые в дальнейшем сможем легко «подписаться» и использовать при проектировании UI как с помощью UIKit, так и с помощью SwiftUI.

В SwiftUI это выглядит более лаконично и более эффектно, так как действие «издателей» Publisher не ограничивается просто выборкой данных, а простирается дальше, вплоть до управления пользовательским интерфейсом (UI). Дело в том, что в SwiftUI разделение данных и View осуществляется с помощью ObservableObject классов с @Published свойствами, изменения которых SwiftUI АВТОМАТИЧЕСКИ отслеживает и полностью «перерисовывает» свои View.

В эти ObservableObject классы можно очень просто заложить определенную бизнес-логику приложения, если некоторые из этих @Published свойств являются результатом синхронных и/ или асинхронных преобразований других @Published  свойств, которые можно напрямую менять такими «активными» элементами пользовательского интерфейса (UI) как текстовые поля TextField, Picker, Stepper, Toggle и т.д.
Читать дальше →
Total votes 5: ↑5 and ↓0+5
Comments1

Как Параллелизм в Swift предотвращает взрывы потоков?

Reading time6 min
Views2K

Как Параллелизм в Swift предотвращает взрывы потоков?

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

Это заставило меня задуматься… Так ли это на самом деле? Как это работает за кулисами? Можем ли мы как-то обмануть систему, чтобы она создавала больше потоков, чем ядер ЦП?

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

Читать далее
Total votes 2: ↑2 and ↓0+2
Comments4

IOS Run Loop: Что? Когда? Зачем?

Reading time4 min
Views25K

Run Loop (цикл исполнения) является механизмом, который позволяет потокам обрабатывать события (events) бесконечно в любое время.

Run Loop представляет из себя объект, который управляет событиями и сообщениями, обрабатывает их, и предоставляет функцию точки входа для выполнения логики события.

Читать далее
Total votes 9: ↑6 and ↓3+3
Comments0

Information

Rating
Does not participate
Registered
Activity

Specialization

Mobile Application Developer, iOS разработчик
Junior
From 60,000 ₽
Git
SWIFT
SwiftUI
Xcode
UIKit
Coredata
Development of mobile applications
iOS development
Autolayout
Realm