[#] [Перевод] RxSwift: немного о share(), replay(), shareReplayLatestWhileConnected() и других классных операторах
habrabot(difrex,1) — All
2017-09-04 09:00:04


_Я уже писал про [Publish, Connect и RefCount в RxSwift][1]. Для того, чтобы лучше раскрыть тему, представляю вашему вниманию перевод другой [ замечательной статьи][2], про различия между такими операторами, как share(), replay(), replayAll(), shareReplay(), publish() и shareReplayLatestWhileConnected(). _

Частая ошибка, которую совершают новички, взявшиеся за освоение [Rx][3] — это непонимание того, что цепочка операторов на Observable выполняется заново с каждым новым подписчиком:

let results = query.rx.text
.flatMapLatest { query in
networkRequestAPI(query)
}
results.subscribe(...) // один запрос в сеть
results.subscribe(...) // другой запрос

Мы имеем несколько подписчиков на один-единственный Observable, но мы не хотим, чтобы его код исполнялся с каждым новым Subscriber'ом. Для этого в [RxSwift][4] имеется несколько операторов. Вот резюмирующая табличка, описывающая каждый из них:

![image][5]
_ 1 — ретранслирует произведенных до подписки элементов не больше, чем bufferSize.
2 — ретранслирует 1 элемент, произведенный до подписки, до тех пор, пока существует хотя бы один подписчик._
[Читать дальше →][6]

[1]: https://habrahabr.ru/post/336662/
[2]: https://medium.com/@_achou/rxswift-share-vs-replay-vs-sharereplay-bea99ac42168
[3]: http://reactivex.io
[4]: https://github.com/ReactiveX/RxSwift
[5]: https://habrastorage.org/web/69d/367/ba3/69d367ba364645eeaf80594928dd28b2.png
[6]: https://habrahabr.ru/post/336970/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut