EasySwift iOS🍏
3.02K subscribers
268 photos
8 videos
393 links
Все самое интересное в мире iOS разработки 🧑🏻‍💻

Предложить статью или новость: @EasySwiftBot

По всем вопросам обращаться к @itereznikov
Download Telegram
Синтаксический анализ JSON в Swift объясняется примерами кода

Синтаксический анализ JSON в Swift является обычным делом. Почти каждое приложение декодирует JSON для отображения данных в визуализированном виде. Синтаксический анализ JSON, безусловно, является одной из основ, которые вы должны изучить как разработчик iOS.

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

Статья
👍116🔥2
Зарплаты разработчиков в первой половине 2022: языки и квалификации

Больше всего выросли зарплаты у разработчиков Delphi — на 30% ко второму полугодию 2021. Не изменились зарплаты у тех, кто работает с JS, PHP и Swift.

В первой половине 2022 года разработчики-стажеры зарабатывали 35 000 ₽. Джуны —
70 000 ₽, мидлы — 150 000 ₽, сеньоры — 240 000 ₽, а лиды — 270 000 ₽.

Если сравнивать второе полугодие 2021 года и первое 2022, то зарплаты выросли у всех, кроме стажеров — (-13%). Самый большой рост был у джунов — на 17%.

Иследование можно посмотреть в данной статье.
👍72🔥1
Расширение своего кругозора

Всем привет! Рекомендую канал своего хорошего друга Senior Androind Dev. Денис, владелец канала, очень предан своему делу. В разработке он более 7 лет. У него вы лично можете взять консультацию, поучаствовать в собеседовании, задать вопрос абсолютно бесплатно.

Вот некоторые статьи из канала Дениса

1. Как добавить функционал сразу в несколько Activity без использования базового класса?

2. Что такое переопределение?

Рекомендую, подписывайтесь https://t.iss.one/droidev
👏52👍2
Жизненный цикл ViewController

👉 init
👉 loadView - создание view
👉 viewDidLoad - viewController создан, Outlets на месте
👉 viewWillAppear - view будет добавлено в иерархию отображения
👉 viewWillLayoutSubViews - каждый раз, когда изменяется frame
👉 viewDidLayoutSubviews - view только что разместило свои subview
👉 viewDidAppear - после того, как ViewController появляется на экране
👉 viewWillDisappear - до того, как viewController будет удален с экрана
👉viewDidDisappear - после удаления viewController'a с экрана
👉 deinit

Почитать cтатью про жизненный цикл ViewController
👍549🤔2
Как работает массив в Swift

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

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

О массивах нужно знать три вещи:
1. Во-первых, массивы могут содержать практически все, что угодно: числа, строки, объекты и даже другие массивы.

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

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

Вывод:
1. Массив имеет фиксированный размер.
2. Рандомный доступ О(1).
3. Вставка/ удаление – О(n).
4. Массивы могут сокращаться и расти О(n).
5. Swift проделывает большую работу за нас при создании массива.
👍24🔥65🤔2
Делаем плавный скролл в нагруженных таблицах

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

Способы оптимизации таблицы, рассмотренные в статье:
1. Повторное использование ячеек/хедеров и футеров — первый и важный шаг оптимизации
2. Уменьшить общее время загрузки и вычислений, их перевод в Background-очереди — значит упростить объем подсчетов
3. Использование стандартных компонентов Core Animation для отрисовки ячеек позволит существенно ускорить процесс отображения и повысить производительность
4. Кеширование данных для ячеек
5. Нет ничего плохого в комбинации Auto Layout и ручного подсчета. Там, где не хватает производительности — использовать ручной подсчет
👍215🔥4
План развития iOS-разработчика с ссылками на материалы обучения

1. Основы программирования

Если Вы, являетесь совсем новичком, я бы порекомендовал изучить  принципы программирования. Курс CS50 для этого идеально подходит. Это серия лекций по Computer Science от Гарвардского университета.

2. Основы Swift

Смотрим следующий плейлист по основам и делаем домашнее задание. Параллельно читаем книгу Василия Усова.

3. Фреймворк UIKit

Рекомендую следующий плейлист с выполнением домашних заданий. Обязательно обращаемся к нашей документации от Apple. Параллельно читаем книгу Мет Ньберга.

4. Работа с сетью. Клиент-серверное приложение

Читаем про работу с сетью, смотрим туториалы, видео и хороший мини плейлист
Берём публичное API и работаем с ним. Создаём приложение используя знания UIKit и сеть.

5. Архитектурные паттерны

Переходим от MVC к другим архитектурам. Мало уметь писать код, он еще должен быть масштабируемый, гибкий и элегантный. Для этого умные дяди инженеры придумали паттерны проектирования — типовые решения для типовых архитектурных задач в коде. Они применимы к любому языку программирования и представляют собой, по большей части, концепции, в которых описываются разные подходы. Советую хороший сайт. А так же, книгу "Совершенный код".

6. Многопоточность. Производительность приложения

Смотрим данный плейлист. Внедряем технологии в ваши проекты.

7. Пишем проект. Учим теорию.

Если вы дошли до 7 пункта, то данный набор знаний, вам хватит написать приложение. Придумайте дизайн, идею и в бой! Так же делюсь с вами ссылкой , где вы можете почитать и узнать что-то новое.

А если, вы хотите каждый день узнавать интерессные новости из мира iOS, подписывайтесь на канал EasySwift
🔥528👍7🎉3
This media is not supported in your browser
VIEW IN TELEGRAM
UICollectionViewLayout для пиццы из разных половинок

Как работает UICollectionView
UICollectionView — это сабкласс от UIScrollView, а он — это обычный UIView, у которого от свайпа меняется bounds. Перемещая его .origin, мы смещаем видимую зону, а меняя .size влияем на масштаб.

При смещении экрана UICollectionView создаёт (или повторно использует) ячейки, а правила их отображения описаны в UICollectionViewLayout. С ним мы и будем работать.

Возможности у UICollectionViewLayout большие, можно задать любое отношение между ячейками. Например, можно сделать очень похоже на то, что умеет iCarousel.

Лейаут не работает с ячейками напрямую. Вместо них используются UICollectionViewLayoutAttributes — это набор параметров, которые будут применены к ячейке. Frame — основной из них, отвечает за положение и размер ячейки. Другие параметры: прозрачность, смещение, положение в глубине экрана и т.д.

В данной статье инженеры из Додо Пиццы рассказывают о том, как они написали лейаут для iOS, с чем столкнулись и от чего отказались.
👍20🔥85🥰2
Асинхронное ожидание в Swift

Асинхронное ожидание является частью новых изменений структурированного параллелизма, которые появились в Swift 5.5 во время WWDC 2021. Параллелизм в Swift означает одновременное выполнение нескольких фрагментов кода. Это очень упрощенное описание, но оно должно дать вам представление о том, насколько важен параллелизм в Swift для производительности ваших приложений. С помощью новых асинхронных методов и операторов await мы можем определять методы, выполняющие работу асинхронно.

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

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

Почитать статью.
Посмотреть доклад
👍9🔥73
Начинаем работу над модуляризацией iOS-приложения

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

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

Вот пример того, как реализуется начальный подход с UIComponents и Core фреймворком и как все работает вместе:

Статья
Код приложения
🔥10👍32🥰1👏1
С наступающим Новым Годом!

В этом году мы концентрировались на Swift и дефолтных фреймворках, а в следующем постараемся удивить новыми форматами и спецпроектами. А пока хотим пожелать:

1️⃣ Развития
Продолжайте расти, узнавайте новое и применяйте на практике, совершенствуйте код, подходы и не бойтесь эксперементировать

2️⃣ Получать удовольствие
Вспомните чувства, когда вы только начинали обучаться. Когда новая строчка кода, фреймворк и UI компонент приводили к эйфории. Желаем, чтобы эти чувства не угасали, а работа приносила только положительные эмоции

3️⃣ Покорения новых вершин
Поставьте амбициозные цели, будь то устройство на первую работу или переход на новый грейд, мы уверены, что всё получится
31👍4
Если брать больше трех недель отпуска в год, есть шансы прожить дольше - к такому выводу пришли ученые из Хельсинского университета в течение 40 летнего эксперимента.

А значит, у вас будет больше времени для изучения Swift⚰️

О том, почему важно отдыхать и как это делать правильно читайте в статье
😁10🤔3👍2
Неблокирование потоков - одна из главных особенностей async / await. В статье приводятся наглядные примеры, как можно ускорить работу приложения переделав с GCD на async / await.

Бонусом рассказывается чем ограничено количество потоков async / await, зачем это сделано и когда все же лучше использовать GCD.

Жаль, что async / await недоступен в objective-c, ведь Swift deprecated 😬
👍13🔥5👏1
В SwiftUI можно легко реализовать поддержку Drag and drop.

Для этого нужно:
• добавить модификатор dropDestination() и обработать перетаскиваемые данные
• добавить модификатор draggable() для данных, которые вы хотите перетаскивать

Подробнее в статье
👍93
This media is not supported in your browser
VIEW IN TELEGRAM
В статье на примере функции receive(on:options:) фреймворка Combine показывается отличие между DispatchQueue.main и RunLoop.main.

Задача стандартная - загрузка картинки в момент, когда пользователь взаимодействует с UI, например, скролит UIScrollView.
На GIF'ке слева используется RunLoop.main, а справа DispatchQueue.main
👍27🔥1
Как долго вы в коммерческой разработке?
Это поможет публиковать более релевантный контент
Anonymous Poll
48%
Ещё учусь
15%
0-1 год
17%
1-3 года
5%
3-5 лет
6%
5+
3%
Не разработчик (QA, PM и тд)
6%
Посмотреть результаты
👍2
Apple выпустили курс по SwiftUI, UIKit, работе с сетью, кешированию и тестам.

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

Редакция канала настоятельно рекомендует к ознакомлению
🔥40👍83❤‍🔥1
Держим в курсе:
👉Теперь можно предложить статью, новость или любимый мем об IT в чат боте

👉Теперь можно оставлять комменты под постами и общаться в чате тут
👍8
EasySwift iOS🍏 pinned «Держим в курсе: 👉Теперь можно предложить статью, новость или любимый мем об IT в чат боте 👉Теперь можно оставлять комменты под постами и общаться в чате тут»
В чате задали вопрос - как пройти по всем значениям кортежа и выбрать одно, соответcтвующее условию.

Простого решения для этой задачи нет, но можно использовать рефлексию, которая в Swift представлена структурой Mirror.

О том что такое рефлексия и как её использовать читайте в статье
👍22🔥1🤡1