В этой статье мы рассмотрим, что вы должны использовать для выполнения асинхронных операций.
- Закрытие/Обратный звонок
- Promise Kit (сторонняя платформа)
- RxSwift (сторонняя платформа)
- Объединить
- Актеры
Прежде чем мы начнем понимать эти концепции, давайте начнем с некоторых основ.
Простой пример получения сведений о пользователе с веб-сервера
Как вы знаете, когда вызывается эта функция getUser(), она выполняется, не дожидаясь асинхронного блока, и возвращает пользовательский объект nil. И асинхронный блок, который устанавливает пользовательский объект через некоторое время.
Console Output ==> Name of the logged in User nil
Теперь мы знаем, почему мы должны ждать до тех пор, пока не получим ответ от асинхронных операций.
Давайте начнем
1. Закрытие/Обратный звонок
Как вы, возможно, уже знаете о замыканиях/обратных вызовах, которые мы обычно используем для отправки блоков в качестве параметра в функции... и в какой-то момент мы вызываем тот же блок с некоторым результатом или пустотой, чтобы выполнить блок. Здесь я взял базовый пример.
Позвольте мне объяснить это. Определена функция getUser(), которая принимает блок завершения в качестве параметра. Тело функции имеет таймер, который будет выполняться через интервал в 1 секунду (рассматривайте это как асинхронный вызов), внутри блока таймера будет создан пользовательский объект, который будет передан в блоке завершения.
При вызове этой функции getUser пользовательский объект будет возвращен после того, как блоки завершения будут вызваны внутри функции getUser().
Плюсы. Замыкания используются для решения основных асинхронных блоков.
Минусы: Однако, когда у нас есть некоторая зависимость от другого блока, у нас может быть вложенный блок, тогда результирующий код становится более сложным, нечитаемым форматом и сложным для управления ссылкой на объект, который будет передавать один блок в другой блок. .
2. Комплект обещаний
Причина использования комплекта обещаний заключается в том, что когда у нас есть серия действий с определенным порядком выполнения задач, это решает проблему вложенного блока замыканий.
Постановка задачи:
Решение:
Итак, здесь, как вы можете видеть выше, мы разделили все три операции на отдельные функции, которые возвращают объект Promise.
Плюсы: —В приведенном выше примере вы узнали, что это будет выполняться последовательно, одно за другим.
Минусы: — возьмем сценарий, в котором мы хотим, чтобы это обещание вызывалось несколько раз, что означает, что всякий раз, когда у нас есть событие, одно обещание будет вызываться, но обещание разрешается только один раз, давайте посмотрим, кто может нам помочь. .
3. РксСвифт
Реактивное программирование, потоки данных, что это значит?

давайте попробуем понять реактивное программирование с помощью этой диаграммы ниже
--a---b-c---d---X---|->
a, b, c, d are emitted values
X is an error
| is the 'completed' signal
---> is the timeline
a, b, c, d — это испускаемые значения, которые были получены в событиях в определенное время, это означает, что существует временная шкала, в которой мы можем ожидать получения события несколько раз, пока эти потоки данных не будут завершены.
Для простоты этого блога я поставил ссылку RxSwift Programming — https://github.com/ReactiveX/RxSwift
4. Объединить

Причина выбора Combine вместо RxSwift: —
- Первая важная причина, по которой вам следует выбрать Combine, а не RxSwift, заключается в том, что Combine является собственной платформой, а RxSwift — сторонней платформой.
Это означает, что вы используете Combine, ваше приложение не будет зависеть от сторонней платформы, а размер вашего приложения будет уменьшен.
2. Вторая причина — комбинировать поддержку поддержки, подписчики могут требовать ценности, когда они хотят их получить, а не только тогда, когда издатель решает их опубликовать.
Чтобы узнать больше, перейдите по этой ссылке — https://developer.apple.com/documentation/combine
5. Актеры
Одна вещь является общей для всех вышеперечисленных решений — это блоки, но если вы хотите избавиться от блоков, вот хорошая новость для вас… Swift 5.5 представляет новый способ обработки параллелизма в iOS для очистки быстрого кода.
Традиционно Swift использовал замыкания и обработчики завершения для обработки асинхронных операций. Как известно, этот подход быстро приводит к «аду обратных вызовов», когда в вашем коде много асинхронных операций или поток управления усложняется.
Все зависит от вас, что вам удобно и подходит для ваших решений. И что подходит для ваших требований и подходит для вашей архитектуры, а также лучше всего подходит для стандарта кодирования.
Спасибо, что читаете, надеюсь, вы найдете свою лучшую чашку чая!
Удачного кодирования :)
-