2016-08-29 7 views
1

Scala SwingのテキストフィールドからObservableを作成するRxScalaコードを記述する必要があります。 Githubの上で見た後、私は仕事に思えるこのコードを書いた:field.textは、そのフィールドからのテキストの現在の状態を与えるパラメータなしのサブスクリプション

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

しかし私は、この行を理解していない:

Subscription() 

このSubscriptionがために有用とは何ですか?これはパラメータを取らないので、作成したオブザーバブルからの退会には使用できないと仮定しています。このオブザーバブルも参照していないためです。

だから、Subscription()とは何ですか?

なぜパラメータはありませんか?

答えて

1

ラインについての質問に答えるために、まず:それは空のサブスクリプションを作成

Subscription() 

を、それは、unsubscribeは、イベントリスナーを登録解除の代わりに、(それに呼び出されたときに何もしないサブスクリプションであります)。あなたが観測を作成する "昔ながらの" 方法を使用している

第二に、ノート:

@deprecated("Use [[Observable.apply]] instead", "0.26.2") 
def create[T](f: Observer[T] => Subscription): Observable[T] 

新しい方法はこの1つであるが:

def apply[T](f: Subscriber[T] => Unit): Observable[T] 

それはRxJavaのObservable.createに対応しています。 この方法でunsubscribeアクションを登録する場合は、Subscriber.add(Subscription)を使用する必要があります。

第3に、すべての種類のスイングイベント用Observablesを定義するRxSwingを指摘しましょう。そのため、あなた自身で再実装する必要はありません。これはJavaで書かれていますが、Scalaとの互換性があります。例えば、this exampleのように見えます。

関連する問題