RxSwift:如何让一个 observable 触发另一个?

Posted

技术标签:

【中文标题】RxSwift:如何让一个 observable 触发另一个?【英文标题】:RxSwift: how to have one observable trigger another one? 【发布时间】:2017-04-18 08:31:26 【问题描述】:

假设我有可观察的A,我正在尝试创建可观察的B,它发出两个事件:第一个是A 发出一个事件,第二个是5 秒后。

到目前为止,我有以下内容:

self.B = Observable.create  [unowned self] observer in
            self.A.subscribe(onNext: 
                observer.onNext(0)
                self.delay(5) 
                    observer.onNext(1)
                
            )
            return Disposables.create()
        

这可行,但我觉得从闭包中订阅A 感到不舒服。有更好的方法吗?

谢谢!

【问题讨论】:

【参考方案1】:

解决方案是为延迟的 observable 重用 a observable。以下是执行此操作的代码以及概念证明。

let a = button.rx.tap.asObservable()
let delay = a.delay(5.0, scheduler: MainScheduler.instance)
let b = Observable.of(a, delay).merge()

b.subscribe(onNext: 
    print("foo")
).disposed(by: bag)

【讨论】:

我在上面为a 使用了一个hot observable。如果你的 a 是一个冷的 observable,你需要 share()publish() 它。 像往常一样的惊人答案+1

以上是关于RxSwift:如何让一个 observable 触发另一个?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 RXSwift 中的 observable 是不是为空?

如何在 RxSwift 中组合多个 Observable

Rxswift 在事件发生时取消观察者并重新订阅

如何在 RxSwift 中取消订阅 Observable?

iOS RxSwift - 如何“断开”一个 observable?

如何从使用 RxSwift 返回 Observable 的服务中获取值