В этой статье мы рассмотрим, что вы должны использовать для выполнения асинхронных операций.

  1. Закрытие/Обратный звонок
  2. Promise Kit (сторонняя платформа)
  3. RxSwift (сторонняя платформа)
  4. Объединить
  5. Актеры

Прежде чем мы начнем понимать эти концепции, давайте начнем с некоторых основ.

Простой пример получения сведений о пользователе с веб-сервера

Как вы знаете, когда вызывается эта функция 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: —

  1. Первая важная причина, по которой вам следует выбрать Combine, а не RxSwift, заключается в том, что Combine является собственной платформой, а RxSwift — сторонней платформой.

Это означает, что вы используете Combine, ваше приложение не будет зависеть от сторонней платформы, а размер вашего приложения будет уменьшен.

2. Вторая причина — комбинировать поддержку поддержки, подписчики могут требовать ценности, когда они хотят их получить, а не только тогда, когда издатель решает их опубликовать.

Чтобы узнать больше, перейдите по этой ссылке — https://developer.apple.com/documentation/combine

5. Актеры

Одна вещь является общей для всех вышеперечисленных решений — это блоки, но если вы хотите избавиться от блоков, вот хорошая новость для вас… Swift 5.5 представляет новый способ обработки параллелизма в iOS для очистки быстрого кода.

Традиционно Swift использовал замыкания и обработчики завершения для обработки асинхронных операций. Как известно, этот подход быстро приводит к «аду обратных вызовов», когда в вашем коде много асинхронных операций или поток управления усложняется.

Все зависит от вас, что вам удобно и подходит для ваших решений. И что подходит для ваших требований и подходит для вашей архитектуры, а также лучше всего подходит для стандарта кодирования.

Спасибо, что читаете, надеюсь, вы найдете свою лучшую чашку чая!

Удачного кодирования :)

-