Вот перевод текста на русский язык:
Предыдущую страницу можно найти по ссылке Математические и агрегатные операторы.md, а возврат к оглавлению — по ссылке README.md.
Observable-очередь, которая может быть подключена, ведёт себя подобно обычной Observable-очереди за исключением того, что она не отправляет элементы при подписке. Вместо этого она начинает отправлять элементы только после выполнения метода connect(). Поэтому вы можете подписаться на все интересующие вас Observable-очереди, которые могут быть подключены, до того как они начнут отправлять элементы.
На этой странице есть примеры с комментариями, попробуйте удалить эти комментарии, запустить примеры заново и понаблюдать за результатами, а затем снова добавить комментарии.
Давайте сначала вспомним операции, которые нельзя выполнить над очередями, которые не могут быть подключены:
func sampleWithoutConnectableOperators() {
printExampleHeader(#function)
let interval = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
_ = interval
.subscribe(onNext: { print("Subscription: 1, Event: \($0)") })
delay(5) {
_ = interval
.subscribe(onNext: { print("Subscription: 2, Event: \($0)") })
}
}
//sampleWithoutConnectableOperators() // ⚠️ Удалите эти комментарии, запустите примеры заново и понаблюдайте за результатами, затем добавьте комментарии обратно.
interval создаёт Observable-очередь, которая отправляет элементы через каждый период. Дополнительная информация.
Рисунок 1.
Преобразует базовую Observable-очередь в очередь, которая может быть подключена. Дополнительная информация.
Рисунок 2.
func sampleWithPublish() {
printExampleHeader(#function)
let intSequence = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
.publish()
_ = intSequence
.subscribe(onNext: { print("Subscription 1:, Event: \($0)") })
delay(2) { _ = intSequence.connect() }
delay(4) {
_ = intSequence
.subscribe(onNext: { print("Subscription 2:, Event: \($0)") })
}
delay(6) {
_ = intSequence
.subscribe(onNext: { print("Subscription 3:, Event: \($0)") })
}
}
//sampleWithPublish() // ⚠️ Удалите эти комментарии, запустите примеры заново и понаблюдайте за результатами, затем добавьте комментарии обратно.
*> Выполнение операций диспетчера — это абстрактная концепция, например, в определённых потоках и очередях отправки.* [Дополнительная информация](https://github.com/ReactiveX/RxSwift/blob/master/Documentation/Schedulers.md).
### replay
Преобразовывает базовую Observable-очередь в очередь, которую можно подключить, и передаёт предыдущие элементы размером *bufferSize* новым подписчикам. [Дополнительная информация](http://reactivex.io/documentation/operators/replay.html).
**Рисунок 3.**
```swift
func sampleWithReplayBuffer() {
printExampleHeader(#function)
let intSequence = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
.replay(5)
_ = intSequence
.subscribe(onNext: { print("Subscription 1:, Event: \($0)") })
delay(2) { _ = intSequence.connect() }
delay(4) {
_ = intSequence
.subscribe(onNext: { print("Subscription 2:, Event: \($0)") })
}
delay(8) {
_ = intSequence
.subscribe(onNext: { print("Subscription 3:, Event: \($0)") })
}
}
// sampleWithReplayBuffer() // ⚠️ Удалите эти комментарии, запустите примеры заново и понаблюдайте за результатами, затем добавьте комментарии обратно.
### multicast
Преобразование базовой Observable-очереди в очередь, которую можно подключать, и отправка указанного *Subject*.
```swift
func sampleWithMulticast() {
printExampleHeader(#function)
let subject = PublishSubject<Int>()
_ = subject
.subscribe(onNext: { print("Subject: \($0)") })
let intSequence = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
.multicast(subject)
_ = intSequence
.subscribe(onNext: { print("\tSubscription 1:, Event: \($0)") })
delay(2) { _ = intSequence.connect() }
delay(4) {
_ = intSequence
.subscribe(onNext: { print("\tSubscription 2:, Event: \($0)") })
}
delay(6) {
_ = intSequence
.subscribe(onNext: { print("\tSubscription 3:, Event: \($0)") })
}
}
//sampleWithMulticast() // ⚠️ Удалите эти комментарии, запустите примеры заново и понаблюдайте за результатами, затем добавьте комментарии обратно.
[*Следующая глава*] Ошибки и обработка ошибок.md — *Вернуться к оглавлению*. README.md
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )