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

OSCHINA-MIRROR/DKJone-RxSwift-document-translation

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

Глава 3. Комбинация

Операторы могут связывать несколько Observable в один сигнал Observable.

startWith

Отправляет указанный элемент, который вставляется перед элементами в очереди. Подробнее.

example("startWith") {
    let disposeBag = DisposeBag()

    Observable.of("🐶", "🐱", "🐭", "🐹")
        .startWith("1️⃣")
        .startWith("2️⃣")
        .startWith("3️⃣", "🅰️", "🅱️")
        .subscribe(onNext: { print($0) })
        .addDisposableTo(disposeBag)
}

Как показано в примере, startWidth может быть объединён в очередь FIFO (первым пришёл — первым вышел), и все элементы, унаследованные от StartWidth, добавляются перед элементами StartWidth.


merge

Объединяет элементы из нескольких источников Observable в одну очередь сигналов Observable, и отправляет события исходной очереди Observable. Подробнее.

example("merge") {
    let disposeBag = DisposeBag()

    let subject1 = PublishSubject<String>()
    let subject2 = PublishSubject<String>()

    Observable.of(subject1, subject2)
        .merge()
        .subscribe(onNext: { print($0) })
        .addDisposableTo(disposeBag)

    subject1.onNext("🅰️")

    subject1.onNext("🅱️")

    subject2.onNext("①")

    subject2.onNext("②")

    subject1.onNext("🆎")

    subject2.onNext("③")
}

zip

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

example("zip") {
    let disposeBag = DisposeBag()

    let stringSubject = PublishSubject<String>()
    let intSubject = PublishSubject<Int>()

    Observable.zip(stringSubject, intSubject) { stringElement, intElement in
        "\(stringElement) \(intElement)"
        }
        .subscribe(onNext: { print($0) })
        .addDisposableTo(disposeBag)

    stringSubject.onNext("🅰️")
    stringSubject.onNext("🅱️")

    intSubject.onNext(1)

    intSubject.onNext(2)

    stringSubject.onNext("🆎")
    intSubject.onNext(3)
}

combineLatest

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

example("combineLatest") {
    let disposeBag = DisposeBag()

    let stringSubject = PublishSubject<String>()
    let intSubject = PublishSubject<Int>()

    Observable.combineLatest(stringSubject, intSubject) { stringElement, intElement in
            "\(stringElement) \(intElement)"
        }
        .subscribe(onNext: { print($0) })
        .addDisposableTo(disposeBag)

    stringSubject.onNext("🅰️")

    stringSubject.onNext("🅱️")
    intSubject.onNext(1)

    intSubject.onNext(2)

    stringSubject.onNext("🆎")
}

Существует также расширение combineLatest для массива:

example("Array.combineLatest") {
    let disposeBag = DisposeBag()

    let stringObservable = Observable.just("❤️")
    let fruitObservable = Observable.from(["🍎", "🍐", "🍊"])
    let animalObservable = Observable.of("🐶", "🐱", "🐭", "🐹")

    Observable.combineLatest([stringObservable, fruitObservable, animalObservable]) {
            "\($0[0]) \($0[1]) \($0[2])"
        }
        .subscribe(onNext: { print($0) })
        .addDisposableTo(disposeBag)
}

Расширение массива требует, чтобы элементы исходного массива были одного типа. Элементы добавляются в массив по порядку 111222333....


switchLatest

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

example("switchLatest") {
    let disposeBag = DisposeBag()

    let subject1 = BehaviorSubject(value: "⚽️")
    let subject2 = BehaviorSubject(value: "🍎")

    let variable = Variable(subject1)
``` ```
variable.asObservable()
        .switchLatest()
        .subscribe(onNext: { print($0) })
        .addDisposableTo(disposeBag)
    
subject1.onNext("🏈")
subject1.onNext("🏀")

variable.value = subject2

subject1.onNext("⚾️")

subject2.onNext("🍐")

В этом примере установка variable.value=subject2 и последующее добавление элемента «⚾️» в subject1 не будет иметь никакого эффекта, так как только последний внутренний Observable очереди subject2 будет отправлять элементы.

Следующая главаВернуться к оглавлению.

Опубликовать ( 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