Rx swift 从create闭包外部触发一个?
我对这一切都不熟悉,所以如果我的RX术语有点不正确,我深表歉意 所以我想实现一个observable,它在接收到系统回调时只发出一次。基本上,这个想法是,通过订阅这个可观察对象,可以保证在执行订阅关闭时系统事件已经发生。如果系统事件已经发生,它可以立即执行;如果系统回调从未执行,它可以推迟到事件发生,也可以从不执行 似乎单个是一个合理的用例,因为它是一个一次性的可观察对象,要么成功,要么失败。但似乎completable的Rx swift 从create闭包外部触发一个?,rx-swift,Rx Swift,我对这一切都不熟悉,所以如果我的RX术语有点不正确,我深表歉意 所以我想实现一个observable,它在接收到系统回调时只发出一次。基本上,这个想法是,通过订阅这个可观察对象,可以保证在执行订阅关闭时系统事件已经发生。如果系统事件已经发生,它可以立即执行;如果系统回调从未执行,它可以推迟到事件发生,也可以从不执行 似乎单个是一个合理的用例,因为它是一个一次性的可观察对象,要么成功,要么失败。但似乎completable的成功回调只能从Single.create{}内部触发 我在create闭包
成功
回调只能从Single.create{}
内部触发
我在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()
}
}
class-MyClass{
私有变量systemCallbackSubject=AsyncSubject()
变量已准备好:单个{
设single=single.create{single in
self.systemCallbackSubject.subscribe(未完成:{
单个(.success(()))
},onDisposed:无)
返回一次性物品。创建{}
}
返回单
}
func onSystemEventCallback()函数{
systemCallbackSubject.onCompleted()的
}
}
是否有更好的方法实现此行为?实现似乎与所需的行为不匹配。如果我理解正确,您愿意多次订阅,并且只有在事件发生时才会得到结果 在这种情况下,我将使用没有初始值的BehaviorSubject。每次订阅时,它都会返回最新的值(如果存在)。如果在订阅后更改,将收到更改。如果您想尝试一次,请添加 .以(1)为例。还可以通过添加.take(1).toSingle()将其转换为Single
或者是带有.replay(1)的内容。谢谢,这更干净了