Что такое Scheduler и операторы receive(on:)/subscribe(on:)?
Суть
Scheduler — протокол, описывающий, где и когда выполняется работа: DispatchQueue, RunLoop, OperationQueue, ImmediateScheduler. Он нужен операторам времени (debounce, delay, throttle, timeout) и двум операторам переключения контекста.
receive(on:)— всё, что ниже по цепочке (операторы и подписчик), получает значения и завершение на указанном scheduler'е. Это то, чем доставляют результат на главный поток перед обновлением UI.subscribe(on:)— на указанном scheduler'е выполняются операции подписки:subscribe,request(demand),cancel— то есть момент, когда upstream начинает работу. Где будут эмитироваться значения, оператор не гарантирует: это определяет сам издатель.URLSession.dataTaskPublisherотдаёт ответ на своей очереди,Subject.send— на потоке вызывающего, иsubscribe(on:)на это не влияет.
Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.
Полный ответ — в DevPrep