iOS Makes Me Hate
3.94K subscribers
1.16K photos
168 videos
15 files
1.33K links
Авторский канал про iOS разработку. Путь продуктовых самураев в MAANG.

Самое больше iOS сообщество практиков: https://boosty.to/lionbond/

Автор: @lvbond Senior iOS Yandex, ex-Avito, VK
Download Telegram
💎 SwiftUI: Модификаторы

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

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

Это отличие плюс декларативный стиль — важный аспект для понимания SwiftUI. Ибо порядок может по-разному повлиять на результат

💎 Как работают модификаторы, зачем нужны и как создавать кастомные написал расширенную статью в ноушене
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
74
🧬 Техники решения алгоритмов: мемоизация

Одна из частых задач для программистов — ряд Фибоначи. Даже мне она как-то попалось на собесе, где я хотел поумничать про хвостовую рекурсию и мемоизацию, но получилось не очень удачно.

Это универсальная задача, на которой можно проверить знания кандидата. Математическая формула Фибоначчи равна F(n) = F(n-1) + F(n-2)

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


У многих есть заблуждение, что мемоизация — это обязательное сохранение функции для её последующего переиспользования. Но это далеко не всегда.

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

Задачи для закрепления:
- Fibonacci Number
- N-th Tribonacci Number

🌄 Расширенная статья про мемоизацию и еще больше техних для решений с алгоритмами тут
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
8
Type Erasure в Swift

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

Когда-нибудь мы сделаем плотную рубрику с разбором на канале. А сейчас разберем популярный кейс.

Если у нас есть протокол с ассоциативным типом, то часто мы столкнемся с такой проблемой:
🔘 1. Есть протокол ObjectProtocol
🔘2. Есть парочка имплементаций этого протокола
🔘3. Есть класс, который ожидает обобщенный тип ObjectProtocol.

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

В новых версиях языка отчасти проблему можно решить с помощью any, но в старых мы делали древнюю технологию под названием Type Erasure. Это обертка, которая помогает реализовать этот протокол. В стандартной либе свифт есть много таких оберток, но мы напишем свою.

👆 Вкратце ознакомися на скриншотах 👆

🔜 А прочитать детальную и подробную статью можно тут
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
83
Forwarded from Mobile Developer (Алексей Гладков)
Mobile Developers Survey Report [EN]
https://get.embrace.io/mobile-app-developers-report/

Исследование в котором приняли участие более тысячи разработчиков

Ключевые моменты
👉 Самая угнетающее в разработке это, когда долго не можешь пофиксить баг
👉 Больше всего android разрабов волнует производительность их аппок, а iOS tooling
👉 На втором месте разрабов больше всего бесят постоянные встречи и кривые процессы
👉 и еще много интересного
Проклятие сеньор разрабов

Наконец об этом кто-то написал.

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

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

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

В статье автор с 14 лет опыта рассказывает как избежать своих ошибок и проклятия. Эффективно управлять своей карьерой, не пытаться втиснуться в чужие рамки и постоянно развиваться
124
🧬 Вопросы для собеседований SwiftUI | Junior ч. 1

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

В ней мы отсеим лишнее и оставим проверенное прикладным опытом разных компаний, боевых задач топ 1 тира.

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

Вышла в релиз первая часть вопросов для собеседований по SwiftUI.

В рамках нее 20 вопросов с ответами и пару десятков статей. Задачи с кодом и проектированием решил делать отдельными сборниками.

Скоро будет статья про навигацию

🌿 Этот и другие сборники можно найти тут
🧬 Ознакомиться с другими сборниками тут
Please open Telegram to view this post
VIEW IN TELEGRAM
11
This media is not supported in your browser
VIEW IN TELEGRAM
🤬 Реакции как в телеграме*

Продолжаю рубрику "Пишем свой телеграм".

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

Ежедневно я создаю контент для подписчиков бусти. Следующий пост в этой рубрике будет про эффект Таноса, как при удалении сообщений.

*почти

🧬 Подробнее про анимации и не только тут
Please open Telegram to view this post
VIEW IN TELEGRAM
75
💎 Паттерн проектирования: Легковес

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

Пример:
Есть текстовый редактор с документом больше 1000 символов. Многие символы имеют одинаковые атрибуты. Для них можно создать легковесный объект для хранения общих атрибутов.

Какие проблемы он решает:
🟣 Большое использование памяти: снижает потребление памяти за счет использования общих данных между несколькими объектами.
🟣 Оптимизация производительности: повышает производительность за счет повторного использования общих данных вместо их пересоздания для каждого объекта.
🟣 Управление большим количеством объектов: упрощает управление большим количеством похожих объектов за счет отделения общих данных от уникальных.

👆 Выше в картинках примеры переиспользования текста для редактора

💎 Больше паттернов здесь
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
13
💎 SwiftUI: Навигация ч. 1

Тема навигации в SwiftUI одна из самых объемных и проблемных.

Хорошая навигация должна включать в себе множество возможностей:
🔘Сохранение стэка экранов
🔘Сброс и доступ к элементам стэка
🔘Переход по дипликам
🔘Сохранение истории
🔘Логичность и стабильность
🔘Гибкость и тестируемость

В процессе подготовки материала для нашего пет-проекта я понял, что одной частью не обойдется.

В первой части я попытался пройтись по двум решениям до iOS 16. Потому что именно версии ниже были сложными и проблемными.

В следующих статьях пройдемся по другим и плавно подойдем к решениям после iOS 16.

💎 Доступ к статье можно получить тут
Please open Telegram to view this post
VIEW IN TELEGRAM
53
🛸 Паттерны навигации: Роутер vs Координатор

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

Главное же отличие такое: Роутер отвечает за вызов из одного экрана, а координатор управляет потоком экранов.

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

Когда использовать координатор:
- Когда хотим отделить знание экранов о друг друге.
- Хотим управлять последовательностью экранов

Доп. ссылки:
- Coordinator Pattern
- Router
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
18
Обновление ноушена и комьюнити за неделю

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

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

За эту неделю мы сделали:
🔘Вопросы по собесам для мидлов по памяти часть 1
🔘Вопросы по собесам для джунов по SwiftUI часть 1
🔘Выделили лучшие идеи для программистов-прагматиков
🔘Написали статьи про модификаторы и навигацию в SwiftUI
🔘Выбрали тему для очередного созвона
🔘В чате попытались перейти на темы, но откатили. А также поговорили про черные списки, как будущие коллеги собирают про нас фидбэк, про цифровые следы в интернете и о многом другом.

Полный список изменений в картинке

🌸 Вступить в сообщество и получить доступ к закрытым материалам можно тут.
Please open Telegram to view this post
VIEW IN TELEGRAM
6
Ритуальное ежегодное погребение иосеров или что такое цифровая услуга

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

Восемь лет назад, когда я был еще фуллстэк разрабом и хотел перейти в мобилку, мне кричали что она умрет. Есть перспективная технология React Native, которая похоронит всех мобильщиков и фронты будут писать для мобилки на джаваскрипте. Есть PWA приложения, которые работают не хуже, Есть офигенный вебвью, который ведь даже чем-то лучше.

Это все обычно пророчили люди, кто пользовался андроидом. Ведь как этот огрызок может конкурировать с миллионами терабайт озу, великолепным дисплеем на пару тысяч метров и колосальной свободой распространения апок. Айфоны — для лохов, кого обдурил Стив Джобс. И для тех, кто любит понтоваться.

Я с ними согласен и поэтому перехожу на андроид. Шутка. Но если серьезно такая риторика повторяется каждые пару лет и эту лодку пытаются шатать все. Одна кроссплатформа вымирает и приходит другая. PWA, BDUI и вебвью вот вот придут, но эффект как в том зацикленном меме с грузовиком, который вот вот въедет в столб. А айфоны это также для людей у кого есть понты, даже если эти люди платят зарплату и владеют бизнесом.

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

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

Поверю ли я, что мобильная разработка умрет? Никогда. А те, кто так считает, просто теряют самую платежеспособную аудиторию. А кто пытается заменить натив на гибрид просто не понимает, что юзеру понятней и доступней нативная мобильная платформа, чем инородный вебвью или мобильная версия. Потеря места на рынке равно отдать свой бизнес бесплатно конкурентам. А на это место обязательно придет кто-то новый. Но это совсем другая история.
3184
💎 Вопросы для собеседований UIKit | Junior часть 2

Начал работать над второй часть вопросов для собеседований.

В ней хочу пройтись по:
🔘Методам жизненного цикла UIView
🔘Управление жестами: UIResponder, UIGestureRecognizer
🔘Анимации
🔘Внутренности UIWindow

🌿 Этот и другие сборники можно найти тут
🧬 Ознакомиться с другими сборниками тут
Please open Telegram to view this post
VIEW IN TELEGRAM
7