1

我需要编写一些 RxScala 代码,Observable从 Scala Swing 中的文本字段创建一个。在查看了 Github 之后,我编写了这段代码,它似乎可以工作:

def textValues: Observable[String] = Observable.create[String](observer => {
  observer.onNext(field.text)
  Subscription()
})

Wherefield.text给出了该字段中文本的当前状态。

但是我不明白这一行:

  Subscription()

这有什么Subscription用?它不带任何参数,所以我假设它不能用于取消订阅我创建的 observable,因为它甚至不引用这个 observable。

那么有什么Subscription()好处呢?

为什么它不带任何参数?

4

1 回答 1

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 的Observable.create. 如果你想unsubscribe用这个方法注册动作,你应该使用Subscriber.add(Subscription).

第三,让我指出RxSwing,它为 Swing 事件定义了各种 Observable,因此您不必自己重新实现它们。它是用 Java 编写的,但它很容易与 Scala 兼容,例如,在这个例子中。

于 2016-09-01T20:49:21.260 回答