Конкат оператор RxSwift - PullRequest
0 голосов
/ 13 июня 2018

У меня есть некоторый код, подобный следующему:

let first = Observable<Int>.create({ observer -> Disposable in
    observer.onNext(1)
    return Disposables.create()
})
let second = Observable.of(4, 5, 6)
let observableConcat = Observable.concat([first, second])
observableConcat.subscribe({ (event) in
    print(event)
})

Что я знаю об операторе concat: «Он подписывается на первую последовательность коллекции, ретранслирует ее элементы до завершения, затем переходит к следующему1. Процесс повторяется до тех пор, пока все наблюдаемые в коллекции не будут использованы ».Так что я ожидал, что результат из фрагмента кода будет 1, 4, 5, 6, но я получил только 1.Пожалуйста, научите меня тому, что я неправильно понял в операторе concat.

Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

В дополнение к ответу CZ54, вы можете сделать это следующим образом

let first = Observable<Int>.create({ observer -> Disposable in
    observer.onNext(1)
    observer.onCompleted()
    return Disposables.create()
})

let second = Observable.of(4, 5, 6)
let observableConcat = Observable.concat([first, second])
observableConcat.subscribe({ (event) in
    print(event)
})
0 голосов
/ 13 июня 2018

Наблюдаемое first никогда не заканчивается.Вы можете остановить это добавив take(1):

Observable.concat([first.take(1), second])
...