我是所有这一切的新手,如果我的RX术语有点失效,请道歉。
所以我想实现一个observable,它只在收到系统回调时发出一次。基本上,这个想法是通过订阅这个observable,可以保证在执行订阅闭包时系统事件已经发生。如果系统事件已经发生,它可以立即执行,或者可以在事件发生之前推迟,或者如果系统回调从未执行则永远不会执行。
似乎Single是一个合理的用例,因为它是一次性可观察的成功或失败。但似乎只能从success
内部触发可完成的Single.create {}
回调。
我通过订阅创建闭包中的单个内容来创建一个解决方法,但感觉就像一个黑客:
class MyClass {
private var systemCallbackSubject = AsyncSubject<Bool>()
var isReady : Single<Void> {
let single = Single<Bool>.create { single in
self.systemCallbackSubject.subscribe(onCompleted: {
single(.success(()))
}, onDisposed: nil)
return Disposables.create {}
}
return single
}
func onSystemEventCallback() {
systemCallbackSubject.onCompleted()
}
}
有没有更好的方法来实现这种行为?
答案 0 :(得分:1)
实现似乎与期望的行为不匹配。如果我理解正确,您愿意多次订阅并仅在事件发生时获得结果。
在这种情况下,我会使用没有初始值的 BehaviorSubject 。每次订阅它时,它都会返回最新值(如果存在)。如果订阅后更改,将收到更改。如果您想要严格1次尝试,请添加 。取(1)。您还可以通过添加 .take(1).toSingle()
将其转换为单身或者 .replay(1)