ReactiveSwift буферизованная труба - PullRequest
0 голосов
/ 30 октября 2019

Как может буферизованный субъект воспроизведения быть реализован в ReactiveSwift ?

Я смотрел на replayLazily(upTo:) оператор SignalProducer, а также функция pipe() типа Signal, однако я не вижу простого способа создания чего-то эквивалентного Rx ReplaySubject.

. также следующие вопросы:

  1. ReactiveSwift реализует Subject с Signal.pipe(), однако вы не можете указать буфер для канала так же, как для Rx ReplaySubject . Есть ли обходные пути?

  2. replayLazily(upTo:) отсутствует оператор типа Signal. Я думаю, это не так уж и плохо, поскольку вы можете создать SignalProducer из Signal. Но почему Signal не имеет того же оператора?

Кто-нибудь сталкивался с этой проблемой раньше? Или я что-то упустил?

Любая помощь будет высоко ценится.

1 Ответ

0 голосов
/ 30 октября 2019

Signal документы говорят:

Наблюдатель Сигнала увидит ту же последовательность событий, что и все остальные наблюдатели. Другими словами, события будут отправлены всем наблюдателям одновременно.

Это в отличие от производителей, которые создают новый сигнал при каждом запуске, что означает, что это возможно для каждого наблюдателя. чтобы увидеть различные события.

Сценарий буферизации требует, чтобы каждый наблюдатель получал список текущих значений в буфере после подписки, а другие наблюдатели не должны получать эти значения каждый раз, когда добавляется новый наблюдатель. Следовательно, каждому наблюдателю нужен свой собственный сигнал, и это означает, что механизм буферизации должен быть реализован как продюсер , который может создать новый сигнал для каждого подписчика.

Есть хорошее обсуждениес 2016 года , когда был добавлен replayLazily, который, как мы надеемся, проясняет мышление оператора и почему оно абсолютно не может быть частью Signal.

...