Что такое Completion Handler в Swift и iOS?

Что такое Completion Handler

Поговорим о том что такое Completion Handler или Обработчик выполнения,
зачем он нужен и как его применять?

Прежде всего краткое определение:

Completion handler – это функция, которая в качестве параметра принимает другую функцию.

Эта функция позволит выполнить основную часть кода только после завершения кода-триггера. Причина по которой нужны такие функции заключается в том,
что мы хотим быть уверены и уведомлены о завершении определенного кода. Обработчик выполнения работает асинхронно. Он позволяет не блокировать
остальной код в ожидании завершения какого-либо процесса. О синхронности, асинхронности и многопоточности обязательно поговорим немного позже.

Приведем простой пример.

Создадим свой Обработчик выполнения следующим образом:

let myCompletionHandler: (Bool) -> Void = { doneWorking in
  if doneWorking {
    print("Work is done.")
  }
}

Completion Handler выполняет свою часть кода только после того, как ему
передадут значение true. Это может быть полезно в случаях, когда одна
функциональность кода критически зависит от другой и без завершения выполнения
первой части вторая не выполнится, или приведет к ошибке.

После того, как мы создали обработчик события, нужно создать функцию, которая
его примет:

func myFunction(using completionHandler: (Bool) -> Void) {
  sleep(3)
  print("Function finished.")
  completionHandler(true)
}

После создания функции вызываем ее и передаем в качеству аргумента наш
обработчик события:

myFunction(using: myCompletionHandler)

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