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

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

По всем вопросам обращаться к @itereznikov
Download Telegram
iOS Run Loop: Что? Когда? Зачем?

Run Loop (цикл исполнения) является механизмом, который позволяет потокам обрабатывать события (events) бесконечно в любое время.

После того, как поток выполнит эту функцию, он будет пребывать в цикле “прием сообщения -> ожидание -> обработка -> спячка до следующего сообщения -> прием сообщения” внутри функции до конца этого цикла (например, было передано сообщение завершения), после чего функция завершится возвратом.

Когда следует использовать цикл исполнения?
Cocoa предоставляет код для запуска основного цикла (main loop) программы и автоматического запуска цикла исполнения. Метод запуска UIApplication в программе IOS (или NSApplication в Mac OS X) используется как часть этапа запуска программы. Он запустит основной цикл программы, когда будет завершен ее запуск.

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

Интересные статьи про Run Loop: статья, статья
6🔥3👍2
Математические основы Auto Layout

Auto Layout — это система верстки. Прежде, чем углубиться в неё, поговорим о современной верстке вообще. Затем займемся Auto Layout — разберемся какую задачу он решает и как это делает. Рассмотрим особенности в имплементации Auto Layout в iOS, и попробуем выработать практические советы, которые могут помочь в работе с ним.

Auto Layout под капотом работают на уровне линейных уравнений. Системы линейных уравнений знакомы нам еще со школы — обозначаются фигурной скобкой, а их решение — уже без. Также у систем линейных уравнений есть сущности, которыми оперирует Auto Layout — ограничения. Обозначаются прямой линией.

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

Прелесть линейных преобразований в том, что они обратимы. Это подводит нас к интересной и довольно тонкой идее, с которой начинается вся современная верстка.
Более подробно читать тут
👍13🔥53
Программирование iOS 14

Описание книги
Если вы знакомы с основами Swift, Xcode и фреймворка Cocoa, эта книга предоставляет структурированное объяснение всех основных компонентов реального мира iOS-приложений. Благодаря глубокому изучению и большому количеству примеров кода вы узнаете, как создавать представления, управлять контроллерами представлений и добавлять функции из платформ iOS.

1. Создавайте, упорядочивайте, рисуйте, накладывайте и анимируйте виды, которые реагируют на прикосновение

2. Используйте контроллеры представления для управления несколькими экранами интерфейса

3. Основные классы интерфейса для представлений прокрутки, представлений таблиц, представлений коллекций, текста, всплывающих окон, разделенных представлений, веб-представлений и элементов управления.

4. Погрузитесь в фреймворки для звука, видео, карт и датчиков
Доступ к пользовательским библиотекам: музыка, фотографии, контакты и календарь

5. Изучите дополнительные темы, включая файлы, сети и потоки.
👍28🔥94
Концепция жизни программы

В контексте модульных языков или языков с ООП — программа рождается, когда появляется минимальный модуль/класс. Затем, после этапа написания некоторого программного кода, программа передается компилятору. Компилятор обеспечивает т.н. compile-time — время компиляции. В результате выполнения процесса компиляции мы получаем компилят (то есть непосредственный результат обработки нашего исходного кода). Во время компиляции наш исходный код влияет на работу компилятора по определенным законам, которые выражены в коде компилятора.

После получения компилята, над ним, сразу или отложенно должен быть исполнен процесс связывания. Возникает время загрузки - load - time.

Запуск и дальнейшая работа. Наиболее известные широкой публике этапы. Представлены временем инициализации (init-time) и временем исполнения (run-time). В сущности, результат работы этого этапа жизненного цикла и является обычно непосредственной целью написания программы. Отдельным важным временем жизни программы является посмертное время (death-time), в которое, вопреки распространенным представлениям тоже является частью жизненного цикла программы.
👍10🔥32
iOS Нотификации. Подписка и рассылка

Нотификации в приложении генерируются из-за событий в самом приложении (например, по таймеру) или по сообщению с сервера. Первые называются локальными, а вторые – пуш-нотификациями.

Пуш-нотификации работают через APNs (Apple Push Notification service). Для отправки сообщения пользователю нужно сформировать запрос к серверу APNs. Это делается разными способами.

Через token соединение.
Через соединение с помощью сертификата.


Статья с практическим примером как реализовать разные виды уведомлений.
👍144🔥2
Хранение данных Core Data.

Используйте Core Data для сохранения постоянных данных вашего приложения для использования в автономном режиме, для кэширования временных данных и для добавления функций отмены в ваше приложение на одном устройстве. Для синхронизации данных на нескольких устройствах в одной учетной записи. iCloud Core Data автоматически отображает вашу схему в контейнере CloudKit.

С помощью редактора моделей данных Core Data вы определяете типы и взаимосвязи ваших данных и создаете соответствующие определения классов. Затем Core Data может управлять экземплярами объектов во время выполнения для обеспечения следующих функций.

Предоставляю вам материал, который поможет пощупать нативный фрейморк от Apple, понять что это и как использовать на практике. В данном материале вы создадите простой To-Do лист без использования сториборда. Хранить данные будете в базе, используя Core Data.
14👍2
Как вы знаете, толковых источников с iOS контентом не так уж много, поэтому рекомендую обратить внимание на канал нашего коллеги Mobile Native. Там Артём публикует различные материалы, которые будут полезны разного уровня разработчикам.

Вот несколько топовых постов с канала

👉 Instagram System Design
👉 Deadlocks in Swift explained
👉 Concurrency in iOS: GCD

Подписывайтесь → @mobile_native
3👍3🔥2🤔1
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