RxSemaphore
此操作符的参数包括多个源可观察对象和一个可选的转换闭包。源可观察对象中的每个元素代表一个新任务的开始,更重要的是,它结束前一个任务。当存在多个源可观察对象时,同时存在多个任务。此操作符类似于串行队列,这些任务被排队。如果某个任务正在等待,并且相关的可观察对象发出新元素,则此任务将被取消,新任务将被排队。
示例
要运行 Example.playground
,首先克隆仓库,然后在 Example 目录中运行 pod install
let o1 = PublishSubject<Int>()
let o2 = PublishSubject<Int>()
Observable.semaphore([o1, o2])
.subscribe(onNext: { value in
print(value)
})
.disposed(by: disposeBag)
o1.onNext(1)
o2.onNext(2)
o2.onNext(3)
o1.onNext(4)
o2.onCompleted()
o1.onCompleted()
wait(1)
signal
wait(3)
signal
wait(4)
signal
对于使用 nil
作为信号的用例,我提供了一个不使用 RxSemaphoreAction
包装的方便版本
let o1 = PublishSubject<Int?>()
let o2 = PublishSubject<Int?>()
Observable.semaphore([o1, o2])
.subscribe(onNext: { value in
print(value)
})
.disposed(by: disposeBag)
o1.onNext(1)
o2.onNext(2)
o2.onNext(nil)
o1.onNext(3)
o2.onNext(4)
o1.onNext(nil)
o2.onCompleted()
Optional(1)
nil
Optional(3)
nil
Optional(4)
nil
需求
安装
RxSemaphore 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中
pod 'RxSemaphore'
作者
Adelais0, [email protected]
许可协议
RxSemaphore 可在MIT许可下使用。更多信息请参阅LICENSE文件。