Как заставить CombineLatest3 вернуть результат, если один издатель не выдал никаких значений? - PullRequest
0 голосов
/ 20 апреля 2020

У меня три издателя. Два, которые уже произвели ценность, и один, который может или не может сделать это. Мне нужно объединить их и произвести вывод.

var changeDay = NotificationCenter.Publisher.init(center: .default, name: .NSCalendarDayChanged

    var someDate: AnyPublisher<Date, Never> {
        Publishers.CombineLatest3($someInputBool, $someInputDate, changeDay).map { (a, b, c) -> Date in
            return <someDate based on a and b, but if day changes, the result will be different.>
        }.eraseToAnyPublisher()
    }

Если день еще не изменился, CombineLatest3 не будет ничего возвращать, поскольку он ожидает начального значения от c до запуска clousure. Как я могу убедиться, что CombineLatest3 возвращается, даже если один издатель не отправил ни одного значения? Я использую c в качестве триггера здесь для пересчета моей пользовательской даты.

1 Ответ

0 голосов
/ 21 апреля 2020

Добавить значение издателю уведомлений. Предварительно созданный издатель сразу же подаст сигнал:

let changeDay = NotificationCenter.default.publisher(for: .NSCalendarDayChanged)
    .map { _ in () }
    .prepend(())

Обратите внимание, что здесь я установил тип Output на Void. Это означает, что мне не нужно создавать фиктивный Notification для добавления, но это также означает, что переменная c в вашем закрытии не будет иметь полезного значения.

...