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
实现编写的,但理论保持不变