1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/DKJone-RxSwift-document-translation

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Connectable_Operators.md 6.5 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 26.11.2024 04:47 73ec4a0

Вот перевод текста на русский язык:

Предыдущую страницу можно найти по ссылке Математические и агрегатные операторы.md, а возврат к оглавлению — по ссылке README.md.

Глава 7 Connectable

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.

publish

Преобразует базовую 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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/DKJone-RxSwift-document-translation.git
git@api.gitlife.ru:oschina-mirror/DKJone-RxSwift-document-translation.git
oschina-mirror
DKJone-RxSwift-document-translation
DKJone-RxSwift-document-translation
master