Синтаксический анализ JSON в Swift объясняется примерами кода
Синтаксический анализ JSON в Swift является обычным делом. Почти каждое приложение декодирует JSON для отображения данных в визуализированном виде. Синтаксический анализ JSON, безусловно, является одной из основ, которые вы должны изучить как разработчик iOS.
Декодирование JSON в Swift довольно простое и не требует каких-либо внешних зависимостей. Базовых API, которые поставляются с Swift, будет достаточно, чтобы выполнить эту работу. В данной статье Вас ждут примеры преоброзования из JSON в модели данных, какие протоколы использовать и много много другого.
Статья
Синтаксический анализ JSON в Swift является обычным делом. Почти каждое приложение декодирует JSON для отображения данных в визуализированном виде. Синтаксический анализ JSON, безусловно, является одной из основ, которые вы должны изучить как разработчик iOS.
Декодирование JSON в Swift довольно простое и не требует каких-либо внешних зависимостей. Базовых API, которые поставляются с Swift, будет достаточно, чтобы выполнить эту работу. В данной статье Вас ждут примеры преоброзования из JSON в модели данных, какие протоколы использовать и много много другого.
Статья
👍11❤6🔥2
Зарплаты разработчиков в первой половине 2022: языки и квалификации
Больше всего выросли зарплаты у разработчиков Delphi — на 30% ко второму полугодию 2021. Не изменились зарплаты у тех, кто работает с JS, PHP и Swift.
В первой половине 2022 года разработчики-стажеры зарабатывали 35 000 ₽. Джуны —
70 000 ₽, мидлы — 150 000 ₽, сеньоры — 240 000 ₽, а лиды — 270 000 ₽.
Если сравнивать второе полугодие 2021 года и первое 2022, то зарплаты выросли у всех, кроме стажеров — (-13%). Самый большой рост был у джунов — на 17%.
Иследование можно посмотреть в данной статье.
Больше всего выросли зарплаты у разработчиков Delphi — на 30% ко второму полугодию 2021. Не изменились зарплаты у тех, кто работает с JS, PHP и Swift.
В первой половине 2022 года разработчики-стажеры зарабатывали 35 000 ₽. Джуны —
70 000 ₽, мидлы — 150 000 ₽, сеньоры — 240 000 ₽, а лиды — 270 000 ₽.
Если сравнивать второе полугодие 2021 года и первое 2022, то зарплаты выросли у всех, кроме стажеров — (-13%). Самый большой рост был у джунов — на 17%.
Иследование можно посмотреть в данной статье.
👍7❤2🔥1
Расширение своего кругозора
Всем привет! Рекомендую канал своего хорошего друга Senior Androind Dev. Денис, владелец канала, очень предан своему делу. В разработке он более 7 лет. У него вы лично можете взять консультацию, поучаствовать в собеседовании, задать вопрос абсолютно бесплатно.
Вот некоторые статьи из канала Дениса
1. Как добавить функционал сразу в несколько Activity без использования базового класса?
2. Что такое переопределение?
Рекомендую, подписывайтесь https://t.iss.one/droidev
Всем привет! Рекомендую канал своего хорошего друга Senior Androind Dev. Денис, владелец канала, очень предан своему делу. В разработке он более 7 лет. У него вы лично можете взять консультацию, поучаствовать в собеседовании, задать вопрос абсолютно бесплатно.
Вот некоторые статьи из канала Дениса
1. Как добавить функционал сразу в несколько Activity без использования базового класса?
2. Что такое переопределение?
Рекомендую, подписывайтесь https://t.iss.one/droidev
Telegram
DroidDev : собесы, вопросы, новости
#Middle #Android #Kotlin #Delegate
Как добавить функционал сразу в несколько Activity без использования базового класса?
[Сложность 👨🦰Middle]
Если есть сложности с ответом, то советую прочитать супер короткую статью:
👉 Android Nightmares 😱 | Base classes…
Как добавить функционал сразу в несколько Activity без использования базового класса?
[Сложность 👨🦰Middle]
Если есть сложности с ответом, то советую прочитать супер короткую статью:
👉 Android Nightmares 😱 | Base classes…
👏5❤2👍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
👉 init
👉 loadView - создание view
👉 viewDidLoad - viewController создан, Outlets на месте
👉 viewWillAppear - view будет добавлено в иерархию отображения
👉 viewWillLayoutSubViews - каждый раз, когда изменяется frame
👉 viewDidLayoutSubviews - view только что разместило свои subview
👉 viewDidAppear - после того, как ViewController появляется на экране
👉 viewWillDisappear - до того, как viewController будет удален с экрана
👉viewDidDisappear - после удаления viewController'a с экрана
👉 deinit
Почитать cтатью про жизненный цикл ViewController
👍54❤9🤔2
Как работает массив в Swift
Массив — это набор элементов одного типа, которые можно устанавливать и извлекать через непрерывный ряд целых чисел, так называемые индексы.
Эти индексы, которые в большинстве компьютерных языков начинаются с нуля, определяют, где в массиве происходит действие.
О массивах нужно знать три вещи:
1. Во-первых, массивы могут содержать практически все, что угодно: числа, строки, объекты и даже другие массивы.
2. Во-вторых, массивы имеют фиксированный размер. Вы не видите этого в Swift, потому что в Swift, когда мы создаем множество, мы не указываем его размер. Но во многих других компьютерных языках при инициализации массива вы должны дать ему начальный размер.
3. В-третьих, у массивов есть уникальная возможность случайного доступа к данным через индекс
Вывод:
1. Массив имеет фиксированный размер.
2. Рандомный доступ О(1).
3. Вставка/ удаление – О(n).
4. Массивы могут сокращаться и расти О(n).
5. Swift проделывает большую работу за нас при создании массива.
Массив — это набор элементов одного типа, которые можно устанавливать и извлекать через непрерывный ряд целых чисел, так называемые индексы.
Эти индексы, которые в большинстве компьютерных языков начинаются с нуля, определяют, где в массиве происходит действие.
О массивах нужно знать три вещи:
1. Во-первых, массивы могут содержать практически все, что угодно: числа, строки, объекты и даже другие массивы.
2. Во-вторых, массивы имеют фиксированный размер. Вы не видите этого в Swift, потому что в Swift, когда мы создаем множество, мы не указываем его размер. Но во многих других компьютерных языках при инициализации массива вы должны дать ему начальный размер.
3. В-третьих, у массивов есть уникальная возможность случайного доступа к данным через индекс
Вывод:
1. Массив имеет фиксированный размер.
2. Рандомный доступ О(1).
3. Вставка/ удаление – О(n).
4. Массивы могут сокращаться и расти О(n).
5. Swift проделывает большую работу за нас при создании массива.
👍24🔥6❤5🤔2
Делаем плавный скролл в нагруженных таблицах
Для многих пользователей важен перфоманс — плавность прокрутки и производительность отрисовки, — потому что это обеспечивает комфортное использование приложения.
Получается, реализация плавного скролла является одной из наших приоритетных задач, решить которую очень непросто.
В данной статье рассматриваются технические аспекты работы со сложными таблицами. Кстати говоря, работа с коллекциями будет аналогична.
1. Повторное использование ячеек/хедеров и футеров — первый и важный шаг оптимизации
2. Уменьшить общее время загрузки и вычислений, их перевод в Background-очереди — значит упростить объем подсчетов
3. Использование стандартных компонентов Core Animation для отрисовки ячеек позволит существенно ускорить процесс отображения и повысить производительность
4. Кеширование данных для ячеек
5. Нет ничего плохого в комбинации Auto Layout и ручного подсчета. Там, где не хватает производительности — использовать ручной подсчет
Для многих пользователей важен перфоманс — плавность прокрутки и производительность отрисовки, — потому что это обеспечивает комфортное использование приложения.
Получается, реализация плавного скролла является одной из наших приоритетных задач, решить которую очень непросто.
В данной статье рассматриваются технические аспекты работы со сложными таблицами. Кстати говоря, работа с коллекциями будет аналогична.
Способы оптимизации таблицы, рассмотренные в статье:
1. Повторное использование ячеек/хедеров и футеров — первый и важный шаг оптимизации
2. Уменьшить общее время загрузки и вычислений, их перевод в Background-очереди — значит упростить объем подсчетов
3. Использование стандартных компонентов Core Animation для отрисовки ячеек позволит существенно ускорить процесс отображения и повысить производительность
4. Кеширование данных для ячеек
5. Нет ничего плохого в комбинации Auto Layout и ручного подсчета. Там, где не хватает производительности — использовать ручной подсчет
👍21❤5🔥4
План развития iOS-разработчика с ссылками на материалы обучения
1. Основы программирования
Если Вы, являетесь совсем новичком, я бы порекомендовал изучить принципы программирования. Курс CS50 для этого идеально подходит. Это серия лекций по Computer Science от Гарвардского университета.
2. Основы Swift
Смотрим следующий плейлист по основам и делаем домашнее задание. Параллельно читаем книгу Василия Усова.
3. Фреймворк UIKit
Рекомендую следующий плейлист с выполнением домашних заданий. Обязательно обращаемся к нашей документации от Apple. Параллельно читаем книгу Мет Ньберга.
4. Работа с сетью. Клиент-серверное приложение
Читаем про работу с сетью, смотрим туториалы, видео и хороший мини плейлист
Берём публичное API и работаем с ним. Создаём приложение используя знания UIKit и сеть.
5. Архитектурные паттерны
Переходим от MVC к другим архитектурам. Мало уметь писать код, он еще должен быть масштабируемый, гибкий и элегантный. Для этого умные дяди инженеры придумали паттерны проектирования — типовые решения для типовых архитектурных задач в коде. Они применимы к любому языку программирования и представляют собой, по большей части, концепции, в которых описываются разные подходы. Советую хороший сайт. А так же, книгу "Совершенный код".
6. Многопоточность. Производительность приложения
Смотрим данный плейлист. Внедряем технологии в ваши проекты.
7. Пишем проект. Учим теорию.
Если вы дошли до 7 пункта, то данный набор знаний, вам хватит написать приложение. Придумайте дизайн, идею и в бой! Так же делюсь с вами ссылкой , где вы можете почитать и узнать что-то новое.
А если, вы хотите каждый день узнавать интерессные новости из мира iOS, подписывайтесь на канал EasySwift
1. Основы программирования
Если Вы, являетесь совсем новичком, я бы порекомендовал изучить принципы программирования. Курс CS50 для этого идеально подходит. Это серия лекций по Computer Science от Гарвардского университета.
2. Основы Swift
Смотрим следующий плейлист по основам и делаем домашнее задание. Параллельно читаем книгу Василия Усова.
3. Фреймворк UIKit
Рекомендую следующий плейлист с выполнением домашних заданий. Обязательно обращаемся к нашей документации от Apple. Параллельно читаем книгу Мет Ньберга.
4. Работа с сетью. Клиент-серверное приложение
Читаем про работу с сетью, смотрим туториалы, видео и хороший мини плейлист
Берём публичное API и работаем с ним. Создаём приложение используя знания UIKit и сеть.
5. Архитектурные паттерны
Переходим от MVC к другим архитектурам. Мало уметь писать код, он еще должен быть масштабируемый, гибкий и элегантный. Для этого умные дяди инженеры придумали паттерны проектирования — типовые решения для типовых архитектурных задач в коде. Они применимы к любому языку программирования и представляют собой, по большей части, концепции, в которых описываются разные подходы. Советую хороший сайт. А так же, книгу "Совершенный код".
6. Многопоточность. Производительность приложения
Смотрим данный плейлист. Внедряем технологии в ваши проекты.
7. Пишем проект. Учим теорию.
Если вы дошли до 7 пункта, то данный набор знаний, вам хватит написать приложение. Придумайте дизайн, идею и в бой! Так же делюсь с вами ссылкой , где вы можете почитать и узнать что-то новое.
А если, вы хотите каждый день узнавать интерессные новости из мира iOS, подписывайтесь на канал EasySwift
🔥52❤8👍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, с чем столкнулись и от чего отказались.
Как работает UICollectionView
UICollectionView — это сабкласс от UIScrollView, а он — это обычный UIView, у которого от свайпа меняется bounds. Перемещая его .origin, мы смещаем видимую зону, а меняя .size влияем на масштаб.
При смещении экрана UICollectionView создаёт (или повторно использует) ячейки, а правила их отображения описаны в UICollectionViewLayout. С ним мы и будем работать.
Возможности у UICollectionViewLayout большие, можно задать любое отношение между ячейками. Например, можно сделать очень похоже на то, что умеет iCarousel.
Лейаут не работает с ячейками напрямую. Вместо них используются UICollectionViewLayoutAttributes — это набор параметров, которые будут применены к ячейке. Frame — основной из них, отвечает за положение и размер ячейки. Другие параметры: прозрачность, смещение, положение в глубине экрана и т.д.
В данной статье инженеры из Додо Пиццы рассказывают о том, как они написали лейаут для iOS, с чем столкнулись и от чего отказались.
👍20🔥8❤5🥰2
Асинхронное ожидание в Swift
Асинхронное ожидание является частью новых изменений структурированного параллелизма, которые появились в Swift 5.5 во время WWDC 2021. Параллелизм в Swift означает одновременное выполнение нескольких фрагментов кода. Это очень упрощенное описание, но оно должно дать вам представление о том, насколько важен параллелизм в Swift для производительности ваших приложений. С помощью новых асинхронных методов и операторов await мы можем определять методы, выполняющие работу асинхронно.
Async означает асинхронный и может рассматриваться как атрибут метода, дающий понять, что метод выполняет асинхронную работу.
Await - это ключевое слово, которое используется для вызова асинхронных методов. Вы можете рассматривать их как лучших друзей в Swift, поскольку одно никогда не будет обходиться без другого
Почитать статью.
Посмотреть доклад
Асинхронное ожидание является частью новых изменений структурированного параллелизма, которые появились в Swift 5.5 во время WWDC 2021. Параллелизм в Swift означает одновременное выполнение нескольких фрагментов кода. Это очень упрощенное описание, но оно должно дать вам представление о том, насколько важен параллелизм в Swift для производительности ваших приложений. С помощью новых асинхронных методов и операторов await мы можем определять методы, выполняющие работу асинхронно.
Async означает асинхронный и может рассматриваться как атрибут метода, дающий понять, что метод выполняет асинхронную работу.
Await - это ключевое слово, которое используется для вызова асинхронных методов. Вы можете рассматривать их как лучших друзей в Swift, поскольку одно никогда не будет обходиться без другого
Почитать статью.
Посмотреть доклад
👍9🔥7❤3
Начинаем работу над модуляризацией iOS-приложения
К модуляризации приложений можно подходить с разных сторон в зависимости от вариантов использования и личных предпочтений. Я думаю, что в идеале каждый модуль должен быть максимально независимым и зависимости, которые нужны модулю, должны быть доступны через интерфейс (он же протокол), а конкретные реализации должны внедряться через внедрение зависимостей. Не всегда возможно или практично скрыть реализацию через интерфейс (протокол), но тем не менее это должно быть целью.
Еще одна важная вещь заключается в том, что модуль должен быть автономным, то есть все функции, связанные с модулем, должны находиться внутри модуля, а не распределяться по разным модулям. Например, модуль онбординга должен иметь весь поток внутри себя, все сетевые запросы и модели ответов внутри, а события отслеживания аналитики, где сеть и аналитика использоваться через интерфейс (протокол) и внедряться в конкретной реализации.
Вот пример того, как реализуется начальный подход с UIComponents и Core фреймворком и как все работает вместе:
Статья
Код приложения
К модуляризации приложений можно подходить с разных сторон в зависимости от вариантов использования и личных предпочтений. Я думаю, что в идеале каждый модуль должен быть максимально независимым и зависимости, которые нужны модулю, должны быть доступны через интерфейс (он же протокол), а конкретные реализации должны внедряться через внедрение зависимостей. Не всегда возможно или практично скрыть реализацию через интерфейс (протокол), но тем не менее это должно быть целью.
Еще одна важная вещь заключается в том, что модуль должен быть автономным, то есть все функции, связанные с модулем, должны находиться внутри модуля, а не распределяться по разным модулям. Например, модуль онбординга должен иметь весь поток внутри себя, все сетевые запросы и модели ответов внутри, а события отслеживания аналитики, где сеть и аналитика использоваться через интерфейс (протокол) и внедряться в конкретной реализации.
Вот пример того, как реализуется начальный подход с UIComponents и Core фреймворком и как все работает вместе:
Статья
Код приложения
🔥10👍3❤2🥰1👏1
С наступающим Новым Годом!
В этом году мы концентрировались на Swift и дефолтных фреймворках, а в следующем постараемся удивить новыми форматами и спецпроектами. А пока хотим пожелать:
1️⃣ Развития
Продолжайте расти, узнавайте новое и применяйте на практике, совершенствуйте код, подходы и не бойтесь эксперементировать
2️⃣ Получать удовольствие
Вспомните чувства, когда вы только начинали обучаться. Когда новая строчка кода, фреймворк и UI компонент приводили к эйфории. Желаем, чтобы эти чувства не угасали, а работа приносила только положительные эмоции
3️⃣ Покорения новых вершин
Поставьте амбициозные цели, будь то устройство на первую работу или переход на новый грейд, мы уверены, что всё получится
В этом году мы концентрировались на Swift и дефолтных фреймворках, а в следующем постараемся удивить новыми форматами и спецпроектами. А пока хотим пожелать:
1️⃣ Развития
Продолжайте расти, узнавайте новое и применяйте на практике, совершенствуйте код, подходы и не бойтесь эксперементировать
2️⃣ Получать удовольствие
Вспомните чувства, когда вы только начинали обучаться. Когда новая строчка кода, фреймворк и UI компонент приводили к эйфории. Желаем, чтобы эти чувства не угасали, а работа приносила только положительные эмоции
3️⃣ Покорения новых вершин
Поставьте амбициозные цели, будь то устройство на первую работу или переход на новый грейд, мы уверены, что всё получится
❤31👍4
Если брать больше трех недель отпуска в год, есть шансы прожить дольше - к такому выводу пришли ученые из Хельсинского университета в течение 40 летнего эксперимента.
А значит, у вас будет больше времени для изучения Swift⚰️
О том, почему важно отдыхать и как это делать правильно читайте в статье
А значит, у вас будет больше времени для изучения Swift⚰️
О том, почему важно отдыхать и как это делать правильно читайте в статье
Т—Ж
Способы перезагрузиться за выходные
И набраться сил
😁10🤔3👍2
Неблокирование потоков - одна из главных особенностей async / await. В статье приводятся наглядные примеры, как можно ускорить работу приложения переделав с GCD на async / await.
Бонусом рассказывается чем ограничено количество потоков async / await, зачем это сделано и когда все же лучше использовать GCD.
Жаль, что async / await недоступен в objective-c, ведь Swift deprecated 😬
Бонусом рассказывается чем ограничено количество потоков async / await, зачем это сделано и когда все же лучше использовать GCD.
Жаль, что async / await недоступен в objective-c, ведь Swift deprecated 😬
Хабр
Async/await в iOS: что нам дает неблокирование потоков
Разработчикам, только начинающим работать с Async/await, бывает довольно сложно разобраться в главной его особенности — неблокировании потоков. Из-за этого возникает непонимание, чем работа с потоками...
👍13🔥5👏1
Что вы используете в своих проектах?
Anonymous Poll
54%
GCD
17%
Новая модель работы с Concurrency - async / await и тд
2%
NSThread’ы и компания
6%
NSOperation
37%
Посмотреть результаты
В SwiftUI можно легко реализовать поддержку Drag and drop.
Для этого нужно:
• добавить модификатор dropDestination() и обработать перетаскиваемые данные
• добавить модификатор draggable() для данных, которые вы хотите перетаскивать
Подробнее в статье
Для этого нужно:
• добавить модификатор dropDestination() и обработать перетаскиваемые данные
• добавить модификатор draggable() для данных, которые вы хотите перетаскивать
Подробнее в статье
Hacking with Swift
How to support drag and drop in SwiftUI - a free SwiftUI by Example tutorial
Learn Swift coding for iOS with these free tutorials
👍9❤3
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
Задача стандартная - загрузка картинки в момент, когда пользователь взаимодействует с UI, например, скролит UIScrollView.
👍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 часов, но некоторые части можно пропустить или пройти быстрее. Подходит новичкам, но также будет полезен тем, кто хочет освежить знания
Редакция канала настоятельно рекомендует к ознакомлению
Курс расcчитан на 15 часов, но некоторые части можно пропустить или пройти быстрее. Подходит новичкам, но также будет полезен тем, кто хочет освежить знания
Редакция канала настоятельно рекомендует к ознакомлению
🔥40👍8❤3❤🔥1
EasySwift iOS🍏 pinned «Держим в курсе: 👉Теперь можно предложить статью, новость или любимый мем об IT в чат боте 👉Теперь можно оставлять комменты под постами и общаться в чате тут»
В чате задали вопрос - как пройти по всем значениям кортежа и выбрать одно, соответcтвующее условию.
Простого решения для этой задачи нет, но можно использовать рефлексию, которая в Swift представлена структурой Mirror.
О том что такое рефлексия и как её использовать читайте в статье
Простого решения для этой задачи нет, но можно использовать рефлексию, которая в Swift представлена структурой Mirror.
О том что такое рефлексия и как её использовать читайте в статье
👍22🔥1🤡1