Concat运营商RxSwift

时间:2018-06-13 13:55:52

标签: ios swift reactive-programming concat rx-swift

我有一些像这样的代码:

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,4,5,6,但我得到的只是1。 请教我对concat算子的误解。

非常感谢。

2 个答案:

答案 0 :(得分:3)

first观察者永远不会结束。您可以停止添加take(1)

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

答案 1 :(得分:2)

除了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)
})