2016-08-29 2 views
1

스칼라 스윙의 텍스트 필드에서 Observable을 만드는 RxScala 코드를 작성해야합니다. Github에서 찾고 후, 나는이 작동하는 것 같다이 코드를 썼다 : field.text 해당 필드에서 텍스트의 현재 상태를 제공매개 변수가없는 구독

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

.

나는 그러나이 줄을 이해하지 않습니다

Subscription() 

Subscription가 유용 무엇입니까? 그것은 매개 변수를 취하지 않으므로 내가 만든 관측 가능 항목에서 탈퇴하는 데 사용할 수 없다고 가정합니다. 왜냐하면이 관측 가능 항목을 참조하기조차하지 않기 때문입니다.

그럼 Subscription()은 무엇에 좋은가요?

왜 매개 변수를 사용하지 않습니까? 즉, unsubscribe 대신 이벤트 리스너를 등록 해제의 (그것을 호출 할 때 아무것도하지 않는 구독을

Subscription() 

그것은이 빈 가입를 만듭니다

답변

1

첫째, 라인에 대한 귀하의 질문에 대답하기). 당신이 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)을 사용해야합니다.

셋째, 스윙 이벤트에 대한 모든 종류의 Observables를 정의하는 RxSwing을 알려주므로 직접 다시 구현할 필요가 없습니다. Java로 작성되었지만 Scala와 쉽게 호환됩니다 (예 : this example에서 볼 수 있듯이).

관련 문제