swift RxSwift:Observableを序列で同期处理に変更するref:https://qiita.com/hikarin522/items/187d48b25d9367170a51
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了swift RxSwift:Observableを序列で同期处理に変更するref:https://qiita.com/hikarin522/items/187d48b25d9367170a51相关的知识,希望对你有一定的参考价值。
class SyncFIFO<T> {
var buf = Array<T>()
let lock = DispatchSemaphore(value: 1)
let sem = DispatchSemaphore(value: 0)
func push(_ val: T) {
self.lock.wait()
defer { self.lock.signal() }
self.buf.append(val)
self.sem.signal()
}
func popSync() -> T {
sem.wait()
lock.wait()
defer { lock.signal() }
return buf.removeFirst()
}
}
extension ObservableType {
func toSequenceSync<T>() -> AnySequence<Event<T>> where T == E {
return AnySequence { () -> AnyIterator<Event<T>> in
let buf = SyncFIFO<Event<T>?>()
let disposable = self.subscribe(buf.push)
return AnyIterator {
guard let ev = buf.popSync() else {
disposable.dispose()
return nil
}
switch ev {
case .error, .completed:
buf.push(nil)
fallthrough
case .next:
return ev
}
}
}
}
}
以上是关于swift RxSwift:Observableを序列で同期处理に変更するref:https://qiita.com/hikarin522/items/187d48b25d9367170a51的主要内容,如果未能解决你的问题,请参考以下文章
RxSwift
RxSwift:延迟 observable 直到另一个 observable 完成?
重试延迟 - RxSwift
RxSwift - 一个 Observable 中的多个 Observable 值
Observable 的 RxSwift 用途
如何在 Observable.create (RxSwift) 中返回/转发一个 observable