Разница между использованием .startWith для опубликованного объекта и простым использованием .onNext в опубликованном объекте. - PullRequest
0 голосов
/ 19 ноября 2018

Есть ли причина выдавать событие по теме с помощью startWith

let publishedSubject1 = PublishedSubject<Void>()
publishedSubject1
    .startWith(Void())
    .subscribe()
    .dispose(by: bag)

против. просто используя .onNext

let publishedSubject2 = PublishedSubject<Void>()
publisedSubject2
    .subscribe()
    .dispose(by: bag)
publishedSubject2.onNext(Void())

Является ли это лишь одним из тех приемов Rx, позволяющих делать одно и то же просто разными стилистическими способами в том же духе, что .map используется для скрытия вложенных подписок путем перемещения подписки внутри оператора карты? Я посмотрел на код здесь: https://github.com/ReactiveX/RxSwift/blob/master/RxSwift/Observables/StartWith.swift, и это просто похоже на еще один трюк. Есть ли функциональная причина использовать .startWith вместо .onNext?

1 Ответ

0 голосов
/ 20 ноября 2018

[Темы] являются «изменяемыми переменными» в мире Rx, и в большинстве случаев они вам не нужны. Как правило, решение с помощью Create или других операторов позволяет просто подключать продолжения без добавления дополнительного состояния.

- Эрик Мейер

Использование более декларативного решения дает вам возможность вообще не использовать темы.Иными словами, использование Subject и ручной вызов onNext не сильно отличаются от простого вызова функции с параметром, поэтому, если вы настаиваете на использовании Subjects, даже если вам не нужно, тогда зачем использовать Rx ввсе

...