Create Operator


Observableを生成する演算子について学びましょう.
先日の投稿でCreateとかCreate Operatorとか
一見すると方法ではないでしょうか.そう言ってもいいです.
そうだ.メソッドは、Rxでは演算子にすぎません.
次に、どの演算子があるかを説明します.
その前に簡単に処理するためにDisposeBagを作っておきます.
let disposeBag = DisposeBag()
正の演算子
これは簡単なパラメータを受信して解放するオペレータです.
例を見てください.
Observable.just(element)
   .subscribe { event in print(event) }
   .disposed(by: disposeBag)

Observable.just([1, 2, 3])
   .subscribe { event in print(event) }
   .disposed(by: disposeBag)
このときの結果は受け取ったパラメータをそのまま入れることになります
演算子
上記のjustは2つ以上の活動をリリースすることは不可能ですが、簡単に2つ以上の活動をリリースしたいなら使いましょう.
アクティビティを順番に渡す.
Observable.of([1, 2], [3, 4], [5, 6])
   .subscribe { element in
        print(element)
   }
   .disposed(by: disposeBag)
演算子
just,ofは直接演算子を解放するだけです.
たとえば、Intという名前の資料型要素をonNextに直接送信します.
アレイに必要な演算子を1つずつ取り出す必要がある場合、from演算子を使用することができます.
let fruits = ["Orange", "Apple", "Grape", "Kiwi"]
Observable.from(fruits)
   .subscribe { element in print(element) }
   .disposed(by: disposeBag)
Range演算子
指定した数で整数を解放する演算子.
開始する整数を指定し、解放する数の演算子を定義した後、1でonNextに計算して解放できます.エラーは指定できません.
例を見てみましょう
Observable.range(start: 1, count: 10)
   .subscribe { print($0) }
   .disposed(by: disposeBag)
   
//next(1)
//next(2)
//next(3)
//next(4)
//next(5)
//next(6)
//next(7)
//next(8)
//next(9)
//next(10)
//completed
に等しい
generate演算子
[範囲](Range)演算子は、変更または拡大された時間には適用されません.この場合generate演算子が使用されます.
全部で3つのパラメータがあります.
  • 初期状態=最初に解放された初期値
  • Condtion=条件がtrueに戻った場合にのみ要素が解放され、一時的に否定条件の解放が完了した後に終了します.
  • 反復=インクリメンタル値を変更するコード位置
  • generateの状態または初期条件は整数に限定されない.文字列やエラーも可能です.
    でもコントロールが難しいので使わない方がいいです.
    Observable.generate(initialState: 0, condition: {
        return $0 <= 10
    }, iterate: {
        $0 + 2
    }).subscribe{
        print($0)
    }
    .disposed(by: disposeBag)
    コードから見ると、以下の構成が可能です.
    repeatElement演算子
    無限に繰り返すことができる演算子.
    エレメントを最初のパラメータに渡すと、再放出可能なエレメントのObserverableが生成されます.
    無限に解放できますが、これは無効な状況になるので、要素の数を制限することも重要です.
    Observable.repeatElement(element)
        .take(7) //숫자 제한두는것
        .subscribe{
            print($0)
        }
        .disposed(by: disposeBag)
    
    前に述べた要素の数を制限しています.take()メソッドを使用します.条件がtake()で完了すると、observerableは繰り返し値を7に解放し、解放完了後に終了します.
    遅延演算子
    実際、defered演算子については、さらに学ぶ必要があります.
    メソッドのパラメータとしてObservableのClosureを返すことは,実際にはよく理解できない.
    fromやjustなどのobserverableは加工後に使われているのではないかという疑問がある.暇なときは必ずもう一度勉強しなければなりません.
    let factory : Observable<String> = Observable.deferred{
        flag.toggle()
        
        if flag == true {
            return Observable.from(animals)
        }else{
            return Observable.from(fruits)
        }
    }
    
    factory.subscribe{
        print($0)
    }.disposed(by: disposeBag)
    Create演算子
    前述したパラメータを解放する演算子はすべて解放され、解放が完了すると(成功すると)メモリから消えます.
    すべて動作の構造があって、これは容易に変えられません.
    そこで、これらを直接カスタマイズできるCreateについて説明します.
    Observable<Type>.create(()-> Disposable)
    パラメータとして受信したモジュールがDisposableを返すという特殊な点がある.
    次にcreate演算子にはいくつかのルールがあります.
  • 要素を解放するときにonNextを使用します.
  • パラメータを使用して要素を解放します.これは、1つ以上である場合がありますが、1つ以上ではない場合もあります.
  • を終了するには、onErrorまたはonCompletedを使用して終了する必要があります.
  • 空、エラー演算子
    EmptyもerrorもNextを生成しません.
    つまり、自分以外の要素は一切解放されません.
    メソッド内では、自分以外の要素は正常に放出されません.
    コードによる
    // empty
    Observable<Void>.empty()
        .subscribe{
            print($0)
        }
        .disposed(by: disposeBag)
    
    // error
    enum MyError: Error {
       case error
    }
    Observable<Void>.error(MyError.error)
        .subscribe {
            print($0)
        }
        .disposed(by: disposeBag)
    
    実行中、両方ともイベントは解放されません.
    error面errorは、error日以外はリリース完了のみで終了します.