Create Operator
Observableを生成する演算子について学びましょう.
先日の投稿でCreateとかCreate Operatorとか
一見すると方法ではないでしょうか.そう言ってもいいです.
そうだ.メソッドは、Rxでは演算子にすぎません.
次に、どの演算子があるかを説明します.
その前に簡単に処理するためにDisposeBagを作っておきます.
これは簡単なパラメータを受信して解放するオペレータです.
例を見てください.
演算子
上記のjustは2つ以上の活動をリリースすることは不可能ですが、簡単に2つ以上の活動をリリースしたいなら使いましょう.
アクティビティを順番に渡す.
just,ofは直接演算子を解放するだけです.
たとえば、Intという名前の資料型要素をonNextに直接送信します.
アレイに必要な演算子を1つずつ取り出す必要がある場合、from演算子を使用することができます.
指定した数で整数を解放する演算子.
開始する整数を指定し、解放する数の演算子を定義した後、1でonNextに計算して解放できます.エラーは指定できません.
例を見てみましょう
generate演算子
[範囲](Range)演算子は、変更または拡大された時間には適用されません.この場合generate演算子が使用されます.
全部で3つのパラメータがあります.初期状態=最初に解放された初期値 Condtion=条件がtrueに戻った場合にのみ要素が解放され、一時的に否定条件の解放が完了した後に終了します. 反復=インクリメンタル値を変更するコード位置 generateの状態または初期条件は整数に限定されない.文字列やエラーも可能です.
でもコントロールが難しいので使わない方がいいです.
repeatElement演算子
無限に繰り返すことができる演算子.
エレメントを最初のパラメータに渡すと、再放出可能なエレメントのObserverableが生成されます.
無限に解放できますが、これは無効な状況になるので、要素の数を制限することも重要です.
遅延演算子
実際、defered演算子については、さらに学ぶ必要があります.
メソッドのパラメータとしてObservableのClosureを返すことは,実際にはよく理解できない.
fromやjustなどのobserverableは加工後に使われているのではないかという疑問がある.暇なときは必ずもう一度勉強しなければなりません.
前述したパラメータを解放する演算子はすべて解放され、解放が完了すると(成功すると)メモリから消えます.
すべて動作の構造があって、これは容易に変えられません.
そこで、これらを直接カスタマイズできるCreateについて説明します.
次にcreate演算子にはいくつかのルールがあります.要素を解放するときにonNextを使用します. パラメータを使用して要素を解放します.これは、1つ以上である場合がありますが、1つ以上ではない場合もあります. を終了するには、onErrorまたはonCompletedを使用して終了する必要があります. 空、エラー演算子
EmptyもerrorもNextを生成しません.
つまり、自分以外の要素は一切解放されません.
メソッド内では、自分以外の要素は正常に放出されません.
コードによる
error面errorは、error日以外はリリース完了のみで終了します.
先日の投稿で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つのパラメータがあります.
でもコントロールが難しいので使わない方がいいです.
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演算子にはいくつかのルールがあります.
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日以外はリリース完了のみで終了します.
Reference
この問題について(Create Operator), 我々は、より多くの情報をここで見つけました https://velog.io/@hzw94/Create-Operatorテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol