首页 > 解决方案 > RxSwift 如何映射到一个 onComplete 事件

问题描述

我有一个BehaviorSubject<[Int]>, 数组的长度一次增加一个。我希望有一个在将第一个元素添加到数组时Observable发出一个completed事件,并且我不关心之后会发生什么。怎么做?

标签: rx-swift

解决方案


将您的订阅包装BehaviorSubject成您自己的,当您更改内容时Observable将调用它:onCompletedBehaviorSubject

let array = BehaviorSubject<[Int]>(value: [])

var observable: Observable<Void> {
    return Observable<Void>.create { observer in
    // skip first element as BehaviorSubject repeats last value on subscription
        array.skip(1).subscribe(onNext: { _ in
            observer.onCompleted()
        })
    }
}

然后像这样使用它:

observable.subscribe(onCompleted: {
    print("bump")
}).disposed(by: disposeBag)

array.onNext([1]) // now "bump" gets printed
array.onNext([1, 2])

推荐阅读