Delegate, замыкание, Combine или AsyncSequence: как выбрать канал обратной связи?
Суть
Делегат, замыкание, Combine и AsyncSequence решают одну задачу — объект сообщает наружу, что что-то произошло, — но отличаются по пяти осям: число получателей (один или много), число событий (одно или поток), кто владеет подпиской, как её отменить и в каком потоке придёт вызов. Выбор следует из этих осей, а не из моды: делегат не устарел, а AsyncSequence не заменяет всё.
Для единственного результата («загрузка завершилась») обычно не нужен ни один из четырёх каналов — достаточно async throws -> URL. Каналы нужны для повторяющихся событий вроде прогресса.
Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.
Полный ответ — в DevPrep