RxSwift-Subjectとの違いを観測できる


観測可能またはSubjectの違い


Subject

  • オブジェクトは、観察可能なオブジェクトまたは観察者のような行動下垂を有するオブジェクトである.
  • オブジェクトはSubjectタイプに適合するオブジェクトであり、ObserverTypeにも適合する.観察者や観察者のように行動することができます
  • //SubjectType에서 ObservableType을 채택
    public protocol SubjectType : ObservableType {
        
        associatedtype Observer: ObserverType
    
        /// Returns observer interface for subject.
        ///
        /// - returns: Observer interface for subject.
        func asObserver() -> Observer
    }
  • の観測対象とSubjectと区別があるとすればUnicastですが、マルチキャストです.
  • UniCast or MultiCast

  • の前に、ObservableはUnicastとして記述され、Unicastは(1:1)接続を表す.observerは1つしか購読できません.
  • ではUnicast方式はobserverを1つしか購読できないので、毎回Observerを生成しますか?そうじゃない!!
  • let randomWithIntObservable: Observable<Int> = Observable<Int>.create { observer in
        observer.onNext(Int.random(in: 1...100))
        
        return Disposables.create()
    }
    
    randomWithIntObservable.subscribe { event in
        print("randomWithInt :(1) \(event)")
    }
    
    
    randomWithIntObservable.subscribe { event in
        print("randomWithInt :(2) \(event)")
    }
    Intタイプの観測性を作成することで、observerが1~100個の数字のイベントを処理できるようにコードを実現しました.これでリリースイベントを購読し、同じ値があるかどうかを確認しましたが、結果は!

    リリース値が異なるイベントが表示されます.観測できるのはユニキャスト方式だから!Unicastモード(1:1)では、1人の観察者のみが接続によって購読観察を許可します.したがって、最初のオブザーバが終了すると、ディスパッチ可能なリストが返され、2番目のサブスクリプションが呼び出されます.
  • 、Subjectはマルチキャスト(1:N)であるため、1人の傍観者はUnicastではなく複数のSubscriberに共有することができる.
  • は、Subjectを観測対象とし、観測対象とすることもできるので、Subscribe(購読)とonNext(イベント配信)を使用することができる.
  • let randomWithSubject: PublishSubject<Int> = PublishSubject<Int>()
    
    
    randomWithSubject.subscribe { event in
        print("randomWithIntSubject :(1) \(event)")
    }
    
    randomWithSubject.subscribe { event in
        print("radomWithIntSubject :(2) \(event)")
    }
    
    randomWithSubject.onNext(Int.random(in: 1...100))

  • Observerableとは異なり、SubjectはonNext(イベントパブリッシュ)だけでなくSubscribe(サブスクリプション)であることがわかります.Observableとは異なりマルチキャストであるため、結果値にも差がある.

  • サブスクリプションを使用して、同じイベント結果値を決定できます.これは私たちが以前強調したマルチキャスト方式です.Subjectは、複数のオブザーバーを購読、表示、共有することができます.だから1回目の購読の活動は2回目の購読の活動に任せました!