LoginSignup
0
1

More than 1 year has passed since last update.

RxSwift基礎-オペレーターその6

Posted at

RxSwiftで使えるオペレーターを備忘録的に書き綴っていきたいと思います。
また、公式Exanpleを参考にしています。
その1はこちら
その2はこちら
その3はこちら
その4はこちら
その5はこちら

また、今回の内容はこちらの動画が非常に解りやすいです。

作業環境については、

を参考に構築して頂ければと思います。
早速、やっていきましょう!!

Mathematical and Aggregate Operators

toArray

func toArray() {
    let disposeBag = DisposeBag()
    
    Observable.range(start: 1, count: 10)
        .toArray()
        .subscribe{ print($0) }
        .disposed(by: disposeBag)
}
toArray() // success([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

文字通り、配列として出力してくれるオペレーターです。

reduce

func reduce() {
    let disposeBag = DisposeBag()
    
    Observable.of("🐵", "🐶", "🦜")
        .reduce("👶🏻", accumulator: +)
        .subscribe(onNext: { print($0) })
        .disposed(by: disposeBag)
}
reduce() // 👶🏻🐵🐶🦜

初期値を指定し、その値に対し、作成したObservableを集約して一つのObservableに変換し、出力するオペレーターです。

concat

func concat() {
    let disposeBag = DisposeBag()
    
    let subject1 = PublishSubject<String>()
    let subject2 = PublishSubject<String>()
    
    let subjectsSubject = BehaviorSubject(value: subject1)
    
    subjectsSubject.asObservable()
        .concat()
        .subscribe(onNext:{ print($0) })
        .disposed(by: disposeBag)
    
    subject1.onNext("🍐")
    subject1.onNext("🍊")
    
    subjectsSubject.onNext(subject2)
    
    subject2.onNext("subject1がonCompletedされるまで値を流しません")
    subject2.onNext("🐱")// 値が流れない
    
    subject1.onCompleted()// 次からはsubject2の値が流れます
    
    subject2.onNext("🐭")
}
concat() /*
🍐
🍊
🐭
*/

concatは、concatenationの略語で、「連結する」の意味があります。
サンプルコードの場合だとsubject1のがcompletedするまでは、subject2の値を流さず、subject1がcompletedすると、subject2のイベントも発生させる事が出来るようになるオペレーターになります。

さいごに

いよいよオペレーターの勉強も後半戦です。全部のオペレーターを使いこなせる自身は無いですが、😭知識としてインプットしておき、いざという時に使える事が出来たらと思う今日この頃です。
ではまたの機会よろしくお願いします。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1