RxSwift、観測できるものは何ですか?


Observable?


観測可能シーケンスとも呼ばれる.Observerableはイベントを渡します.Observerは、監視および転送されたイベントの処理を担当します.監視可視性表示サブスクリプション.したがって、ObserverをSubscriberとして表す場合がある.

Event?


メソッド;変数を定義する場合、通常はオブジェクトまたは構成部品単位として組み合わせて使用されます.使用時には、現在の位置に含まれるメソッドまたは変数を呼び出すこともできます.しかし、どのようにして異なるオブジェクトに情報を伝送しますか?この場合,データを交換できる空間を抽象化し,これらの空間を介して仕様に従って情報を交換することができる.このとき使う空間がアクティブです.したがって、このイベントには単純な値だけでなく、ユーザーとのインタラクションも含まれており、これらのオブジェクト間を自由に移動できます.
RxSWIFTは、イベントを伝達することによって情報を交換し、前の文章に記載されているように、非同期的に観察可能なイベントを処理する.次の文書Minso NeのブログでRxを直接実施では、JENNERICタイプパラメータを関連値として使用するイベント、エラー、および完了事例を抽象化し、Eventという空間を作成します.(実際にもそうです)
enum Event<T> {
    case next(T)
    case error(Swift.Error)
    case completed
}

Observable転送イベント


前述したように、Observerableは3つのイベントを非同期で伝達する.Next, Error, Completed

Next


Observerableで発生した新しいイベントは、Next Eventを介して購読者として伝達される.イベントに値(数値またはカスタムインスタンスと同じ値、タブと同じジェスチャー)が含まれている場合は、次のイベントとともに渡されます.RxSWIFTでは、これはタスク(リリース)として表される.Observableのライフサイクルでは、次の1つ以上のイベントが伝達されません.

Error, Completion


Observableでエラーが発生した場合、エラーイベントが渡されます.逆に、正常に終了すると、完了したイベントが渡されます.2つのイベントは観測可能なライフサイクルの最後の段階で伝達される.その後、Observerableは終了し、すべてのリソースが消去されるため、他のイベントは転送されません.通常、この2つのアクティビティはEmissionではなく、Notificationと呼ばれます.

ライフサイクルの観測


Observableは、nextイベントを生成して解放し、状況に応じて完了し、errorイベントに通知し、終了するライフサイクルを有する.

Hot Observable vs Cold Observable


私は「ネクストイベントを通して購読者として伝える」ことを知っていますが、Observerableはいつから事件が発生しますか?また、購読者はどこからシーケンスを観察できますか?これは,観測可能がシーケンスであるために生じる問題である.この質問に対する回答によって、ホットとコールドに分けられます.
主な違いは以下の2つです.
  • イベントは
  • で開始しました.
  • サブスクリプションは、イベントシーケンス
  • を最初から表示できるかどうか

    Hot Observable


    A “hot” Observable may begin emitting items as soon as it is created, and so any observer who later subscribes to that Observable may start observing the sequence somewhere in the middle.
    Hot Observerableを作成するたびに、イベントの解放が開始されます.後で購読するobserverは、シーケンスの真ん中から観察されます.
    リアルタイム放送みたいな感じ一生の成果はずっと釈放されている.すべてのObserverableはイベントを処理するために購読する必要があるため、購読しないと過去のイベントは破棄されます.また,途中から購読を開始すれば,その後の活動から観察することができる.
    分岐流の性質があるため、分岐流が必要な場合はHot Observerableを使用します.言い換えれば、複数の観察者が同じ観察可能なリソースを共有したい場合は、Hot Observerを使用します.
  • UI(主にマウスイベント、キーボードイベント、およびシステムイベントに使用される)
  • publish:ObservableをConnectableObservableに変換そのため,Observerableの属性がホットスポットとなっている.connect()関数を使用してシーケンスを開始できます.
  • 再放送:観測可能を観測可能に変換する.そのため,Observerableの属性がホットスポットとなっている.購読を開始すると、発生したすべてのアイテムが最初から返却されます.
  • refCount:hot属性を持つ観測可能なReference(購読者)をカウントする.サブスクライバがゼロ(0)の場合、観測性が処理されます.
  • share : publish + refCount
  • Cold Observable


    A “cold” Observable, on the other hand, waits until an observer subscribes to it before it begins to emit items, and so such an observer is guaranteed to see the whole sequence from the beginning.
    Cold Observerableはobserverが購読するまでリリースを待っています.これにより、すべてのシーケンスのイベントを表示できます.
    普通のVODみたいな感じ作成後、購読するまでイベントは解放されません.したがって、シーケンス内のすべてのイベントを観察することができます.
    激流性はありません.したがって、Cold Observerを複数回購読する場合、各Observerには個別の観測可能なインスタンスがある.シーケンスの作成に時間がかかる場合、Cold Observerableはサブスクリプションが発生するたびにこのプロセスを通過する必要があります.
  • HTTPリクエスト、一般Webリクエスト、データベースクエリーなどに使用され、リクエスト後に結果が得られます.
  • Single
  • just
  • of
  • Observableの作成


    1.Createの使用


    第1の方法はcreate演算子によって直接観測可能な動作を実現することである.
    create演算子はobserverTypeプロトコルで宣言されるタイプのメソッドです.create演算子は、モジュール内でパラメータ、observerを受信することによってDisposableを返します.
    Observable<Int>.create { (observer) -> Disposable in
    
        // observer로 next이벤트에 0을 담아서 전달한다. 아래처럼 구현하는 것도 가능.
        observer.on(.next(0))
        observer.onNext(1)
        
        // 마지막으로 아래 함수를 호출하면 completed 이벤트가 전달되고 Observable이 종료된다. 
        // 당연히 이후에는 어떤 이벤트도 전달되지 않는다.
        observer.onCompleted()
        
        // 마지막으로 Disposable을 리턴한다. Disposable은 메모리 정리에 필요한 객체이다.
        return Disposables.create()
    }

    2.その他の演算子の使用


    2つ目の方法はcreateではなく他の演算子を使用することです.
    前にイベント伝達コードが直接実現された.今回使用した演算子は、事前に定義されたルールに従ってイベントを渡します.from演算子を使用して、上のcreate演算子で作成したObserverableと同じイベント転送Observerableを作成します.
    Observable.from([0, 1])
    from演算子は、パラメータの配列に渡された要素を順番に渡し、完了したイベントを渡すObservableを生成します.このように簡単に順次解放されたObserverableを作成する場合、createよりもfromなどの他の演算子を使用するほうがよい.この演算子はいろいろありますから、後で勉強しましょう.