RxSemaphore 0.2.0

RxSemaphore 0.2.0

Adelais0 维护。



  • Adelais0

RxSemaphore

CI Status Version License Platform

此操作符的参数包括多个源可观察对象和一个可选的转换闭包。源可观察对象中的每个元素代表一个新任务的开始,更重要的是,它结束前一个任务。当存在多个源可观察对象时,同时存在多个任务。此操作符类似于串行队列,这些任务被排队。如果某个任务正在等待,并且相关的可观察对象发出新元素,则此任务将被取消,新任务将被排队。

示例

要运行 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文件。