2016-09-03 45 views
0

私はRxSwiftとリアクティブプログラミングの新機能です。ここに私のコードです:RxSwiftのasObserver、asObservableとnoneの違い

let disposeBag = DisposeBag() 
    let dartScore = PublishSubject<Int>() 
    dartScore.asObserver() 
    .scan(501, accumulator: { 
     intermediate, newValue in 
     var result = intermediate - newValue 
     return result >= 0 ? result : intermediate 
    }) 
    .do(onNext: { 
     if $0 == 0 { 
     dartScore.onCompleted() 
     } 
    }) 
    .subscribe(onNext:{print($0)}, onCompleted:{print("Game over")}) 
    .addDisposableTo(disposeBag) 

    dartScore.onNext(13) 
    dartScore.onNext(60) 
    dartScore.onNext(50) 
    dartScore.onNext(0) 
    dartScore.onNext(0) 
    dartScore.onNext(378) 

あなたが気づいたかもしれませんdartScore.asObserver()。私は.asObserver()を削除したり、.asObservable()と交換した場合、最終結果は同じです。

488 
428 
378 
378 
378 
Game over 

誰でも差がSubjectasObserverasObservableまたは通常observableオブジェクトである何)との間にあるかを説明するのに役立つことはできますか?

答えて

1

SubjectObserverTypeObservableの両方であるからです。 PublishSubject

など、あなたが asObserverを呼び出すときあなたはまだそれが Observableなので、まだ subscribeで呼び出すことができ、 PublishSubjectを持っているので、 AnyObserverPublishSubjectから消去入力していません