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

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

По всем вопросам обращаться к @itereznikov
Download Telegram
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. Практические рекомендации для дизайнеров и разработчиков.
20👍6👏2
Channel name was changed to «EasySwift iOS🍏»
Шаблон координатора с TabBar контроллером

Шаблон координатора - это шаблон в 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
11👍5🤔1😱1
Frame и Bounds

Frame - положение и размер view с использованием системы координат родительского представления (важно для размещения представления в superview).
Bounds - местоположение и размер view с использованием его собственной системы координат (важно для размещения содержимого View или subview внутри него).
Другими словами можно сказать, что Frame - это рамка, Bounds - картинка внутри рамки.


- IntrinsicContentSize (свойство у View) - это размер ĸоторый описывает минимальное пространство для полного отображения ĸонтента.
- Content hugging prioriti - сопротивление на увеличение.
- Content compression resistance - сопротивление на уменьшение.
👍215🔥3

Ответ:
Простой вариант ответа.
Инкапсуляция - это сокрытие реализации класса и отделение его внешнего представления от внутреннего.

Чуть сложнее.
Инкапсуляция – это свойство системы, позволяющее объединить данные и методы, работающие с ними в классе и скрыть детали реализации от пользователя, открыв только то, что необходимо
используя модификаторы доступа.

[Сложность Junior 👶]
👍34🔥4🤔2👏1🎉1
Метод множеств .isSuperset(of:)

Если вы хотите узнать, является ли ваше множество надмножеством другого множества, используйте метод .isSuperset(of:). Этот метод возвращает true, если проверяемое множество является надмножеством указанного множества. Иначе возвращается false.
👍223🔥3
Синтаксический анализ 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