Listener RXSwift事件侦听器

Listener RXSwift事件侦听器,listener,rx-swift,Listener,Rx Swift,我对被动模式有点陌生,现在我有了第一个更大的问题 我以被动的方式提出了一些不同步的请求。但我现在不想做的是“事件聆听者” 我有一个Session对象,目前我有一个SessionEventListener协议。会话有一个侦听器列表,并通知所有侦听器成功登录和注销。此侦听器可以订阅和取消订阅。这是我现在想要创造的东西 你会怎么做 我的想法是定义一个行为主体: public let loginEventBehaviourSubject = BehaviorSubject(value: true)

我对被动模式有点陌生,现在我有了第一个更大的问题

我以被动的方式提出了一些不同步的请求。但我现在不想做的是“事件聆听者”

我有一个
Session
对象,目前我有一个
SessionEventListener
协议。会话有一个侦听器列表,并通知所有侦听器成功登录和注销。此侦听器可以订阅和取消订阅。这是我现在想要创造的东西

你会怎么做


我的想法是定义一个行为主体:

public let loginEventBehaviourSubject = BehaviorSubject(value: true)
现在,如果会话登录,我可以发送onNext true;如果会话注销,我可以发送onNext false:

loginEventBehaviourSubject.onNext(true) // on login
loginEventBehaviourSubject.onNext(false) // on logout
我的“听众”可以订阅它

但我更喜欢每个活动都有主题:

public let loginEventBehaviourSubject = BehaviorSubject(value: )
public let logoutEventBehaviourSubject = BehaviorSubject(value: )
但那样的话,我就不需要那本书了。我可以制作一种“空”主题,只触发“事件”,而不提交真正的数据

最后一个问题是:
为什么我必须向主题的初始值设定项添加实例。为什么我不能像这样创建它:
behavior subject()

因为行为主体是API,所以需要给它一个初始值。实际上,它定义了
BehaviorSubject.value()
方法,该方法返回
T
。如果没有合适的初始值,调用
是没有意义的。在本例中,我认为
PublishSubject
更能代表当前的任务。您可以在reactivex网站上找到

如果您只对主题的
.next
事件感兴趣,您可以执行
让loginsobject=PublishSubject()
(使用行为主题,您可以编写
行为主题(值:())
),并且可以调用
loginsobject.onNext()


但请注意,使用任何主题通常都是一种反模式。事实上,主体在大多数情况下都是为了从命令式世界过渡到反应式世界,你通常可以创建类似于
loginEventObservable
的东西,作为其他可观察事物的组合。关于这方面的更多信息,我建议阅读。它是使用Rx的
.Net
实现编写的,但理论保持不变