我需要编写一些RxScala代码,用于从Scala Swing中的文本字段创建Observable
。
在查看Github之后,我编写了这段代码,这似乎有用:
def textValues: Observable[String] = Observable.create[String](observer => {
observer.onNext(field.text)
Subscription()
})
其中field.text
给出该字段中文本的当前状态。
但我不明白这一行:
Subscription()
这Subscription
对此有用吗?它没有采用任何参数,因此我假设它不能用于取消订阅我创建的可观察数据,因为它甚至不能引用这个可观察数据。
那么Subscription()
有什么好处?
为什么不接受任何参数?
答案 0 :(得分:1)
首先,回答关于这一行的问题:
Subscription()
它会创建一个空订阅,即在其上调用unsubscribe
时不执行任何操作的订阅(而不是取消注册事件侦听器)。
其次,请注意您正在使用"老式"创建Observables的方法:
@deprecated("Use [[Observable.apply]] instead", "0.26.2")
def create[T](f: Observer[T] => Subscription): Observable[T]
新方法就是这个:
def apply[T](f: Subscriber[T] => Unit): Observable[T]
它对应于RxJava' s Observable.create
。
如果您想使用此方法注册unsubscribe
操作,则应使用Subscriber.add(Subscription)
。
第三,让我指出RxSwing,它定义了各种Swing Events的Observable,这样你就不必自己重新实现它们了。它是用Java编写的,但它很容易与Scala兼容,例如,您可以在this example中看到。