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