Deferred publisher откладывает создание своего внутреннего publisher'а до момента, когда подписчик фактически подключится. Без него publisher создаётся сразу при определении, что может привести к непредвиденным побочным эффектам или устаревшему состоянию.
Вместо того чтобы инстанцировать publisher сразу, Deferred принимает фабричное замыкание, которое выполняется только при начале подписки:
let deferred = Deferred {
Future<Int, Never> { promise in
promise(.success(42))
}
}
Каждый новый подписчик запускает замыкание, создавая свежий экземпляр publisher'а каждый раз.
Deferred издатель создает своего внутреннего издателя немедленно при определении, а затем доставляет тот же экземпляр издателя всем подписчикам.
Новый — ещё не проверен сообществом
Вы