Rx swift 从create闭包外部触发一个?

Rx swift 从create闭包外部触发一个?,rx-swift,Rx Swift,我对这一切都不熟悉,所以如果我的RX术语有点不正确,我深表歉意 所以我想实现一个observable,它在接收到系统回调时只发出一次。基本上,这个想法是,通过订阅这个可观察对象,可以保证在执行订阅关闭时系统事件已经发生。如果系统事件已经发生,它可以立即执行;如果系统回调从未执行,它可以推迟到事件发生,也可以从不执行 似乎单个是一个合理的用例,因为它是一个一次性的可观察对象,要么成功,要么失败。但似乎completable的成功回调只能从Single.create{}内部触发 我在create闭包

我对这一切都不熟悉,所以如果我的RX术语有点不正确,我深表歉意

所以我想实现一个observable,它在接收到系统回调时只发出一次。基本上,这个想法是,通过订阅这个可观察对象,可以保证在执行订阅关闭时系统事件已经发生。如果系统事件已经发生,它可以立即执行;如果系统回调从未执行,它可以推迟到事件发生,也可以从不执行

似乎单个是一个合理的用例,因为它是一个一次性的可观察对象,要么成功,要么失败。但似乎completable的
成功
回调只能从
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)

的内容。谢谢,这更干净了