Холодные и горячие издатели: share, multicast и Future — что выполняется сколько раз?
Суть
Холодный издатель начинает работу заново при каждой подписке и отдельно для каждого подписчика: dataTaskPublisher, Just, Deferred, Sequence.publisher. Два sink на один dataTaskPublisher — это два HTTP-запроса. Горячий издатель производит значения независимо от подписчиков и раздаёт одни и те же всем текущим: subjects, @Published, NotificationCenter.publisher, Timer.publish после connect.
Операторы наследуют холодность: map, decode, handleEvents выполняются отдельно для каждого подписчика. Отсюда дублирующиеся запросы, двойное логирование и побочные эффекты, выполненные N раз.
Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.
Полный ответ — в DevPrep