iOS вопросы на интервью
Время важно. Бесконечный поиск, чтобы попрактиковаться в вопросах интервью для iOS, утомляет и отнимает много времени. Цель этой статьи — собрать как можно больше вопросов для интервью с iOS вместе с ответами, чтобы сэкономить ваше время.
Предлагаю освежить свои знания, а кому-то узнать что-то новое для себя в данной статьте.
Время важно. Бесконечный поиск, чтобы попрактиковаться в вопросах интервью для iOS, утомляет и отнимает много времени. Цель этой статьи — собрать как можно больше вопросов для интервью с iOS вместе с ответами, чтобы сэкономить ваше время.
Предлагаю освежить свои знания, а кому-то узнать что-то новое для себя в данной статьте.
❤21👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Разработка анимации на iOS — восемь примеров интерфейса с кодом
На WWDC 2018 дизайнеры Apple представили доклад под названием «Разработка текучих интерфейсов», в котором раскрыли детали жестового интерфейса IPhone X.
Если вы попытаетесь реализовать эти идеи на практике, то обнаружите пропасть между идеей и тем, как её воплотить
Цель данной статьи — преодолеть эту пропасть, представив рабочий код для всех примеров из презентации.
Что будет в этой статье:
1. Краткое описание презентации «Проектирование текучих интерфейсов».
2. Восемь текучих интерфейсов, теория дизайна, на которой они строятся, и код для их создания.
3. Практические рекомендации для дизайнеров и разработчиков.
На WWDC 2018 дизайнеры Apple представили доклад под названием «Разработка текучих интерфейсов», в котором раскрыли детали жестового интерфейса IPhone X.
Если вы попытаетесь реализовать эти идеи на практике, то обнаружите пропасть между идеей и тем, как её воплотить
Цель данной статьи — преодолеть эту пропасть, представив рабочий код для всех примеров из презентации.
Что будет в этой статье:
1. Краткое описание презентации «Проектирование текучих интерфейсов».
2. Восемь текучих интерфейсов, теория дизайна, на которой они строятся, и код для их создания.
3. Практические рекомендации для дизайнеров и разработчиков.
❤20👍6👏2
Шаблон координатора с TabBar контроллером
Шаблон координатора - это шаблон в iOS, отвечающий за управление потоками приложений и навигацию между ViewControllers. Это помогает сделать навигационные потоки более управляемыми и более многократно используемыми, а также позволяет нам настраивать их по мере необходимости.
В данной статье автор показывает как можно это реализовать, используя наиболее распространенные потоки: поток входа и основной поток(который включает TabBar контроллер). Используя координатор, мы можем определять потоки приложений и управлять навигацией между ViewController. Читать и смотреть код, в данной статье
Шаблон координатора - это шаблон в iOS, отвечающий за управление потоками приложений и навигацию между ViewControllers. Это помогает сделать навигационные потоки более управляемыми и более многократно используемыми, а также позволяет нам настраивать их по мере необходимости.
В данной статье автор показывает как можно это реализовать, используя наиболее распространенные потоки: поток входа и основной поток(который включает TabBar контроллер). Используя координатор, мы можем определять потоки приложений и управлять навигацией между ViewController. Читать и смотреть код, в данной статье
❤12👍1👏1
Swinject: внедрения зависимостей для Swift
Swinject— это легковесный фреймворк внедрения зависимостей для Swift. Внедрение зависимостей (Dependency injection, DI) — это шаблон проектирования, который реализует инверсию управления (IoC) для разрешения зависимостей.
В этом шаблоне Swinject помогает разделить ваше приложение на слабо связанные компоненты, которые легче разрабатывать, тестировать и поддерживать. Swinject основан на системе универсальных типов Swift и функциях первого класса, позволяющих просто и свободно определять зависимости вашего приложения.
Swinject на GitHub: https://github.com/Swinject/Swinject
Swinject— это легковесный фреймворк внедрения зависимостей для Swift. Внедрение зависимостей (Dependency injection, DI) — это шаблон проектирования, который реализует инверсию управления (IoC) для разрешения зависимостей.
В этом шаблоне Swinject помогает разделить ваше приложение на слабо связанные компоненты, которые легче разрабатывать, тестировать и поддерживать. Swinject основан на системе универсальных типов Swift и функциях первого класса, позволяющих просто и свободно определять зависимости вашего приложения.
Swinject на GitHub: https://github.com/Swinject/Swinject
❤11👍5🤔1😱1
Frame и Bounds
Frame - положение и размер view с использованием системы координат родительского представления (важно для размещения представления в superview).
Bounds - местоположение и размер view с использованием его собственной системы координат (важно для размещения содержимого View или subview внутри него).
Другими словами можно сказать, что Frame - это рамка, Bounds - картинка внутри рамки.
- IntrinsicContentSize (свойство у View) - это размер ĸоторый описывает минимальное пространство для полного отображения ĸонтента.
- Content hugging prioriti - сопротивление на увеличение.
- Content compression resistance - сопротивление на уменьшение.
Другими словами можно сказать, что Frame - это рамка, Bounds - картинка внутри рамки.
- IntrinsicContentSize (свойство у View) - это размер ĸоторый описывает минимальное пространство для полного отображения ĸонтента.
- Content hugging prioriti - сопротивление на увеличение.
- Content compression resistance - сопротивление на уменьшение.
👍21❤5🔥3
Ответ:
Инкапсуляция - это сокрытие реализации класса и отделение его внешнего представления от внутреннего.
Чуть сложнее.
Инкапсуляция – это свойство системы, позволяющее объединить данные и методы, работающие с ними в классе и скрыть детали реализации от пользователя, открыв только то, что необходимо
[Сложность Junior 👶]
👍34🔥4🤔2👏1🎉1
Синтаксический анализ 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