[RxSwift] What are Transforming Operators?

봄인·2023년 3월 7일
0

About-RxSwift

목록 보기
4/5
post-thumbnail

Transforming Operators let us change the observable data to new sequence.

ToArray

ToArray operator allows to change every elements of observable to an array.

let disposeBag = DisposeBag()

Observable.of(1, 2, 3, 4, 5)
.toArray()
.subscribe({
    print($0)
})
.disposed(by: disposeBag)

If we run this code,

success([1, 2, 3, 4, 5])

As we can see, the elements are in an array.

Map

Map operator returns the elements converted through the expression.

Observable.of(1, 2, 3, 4, 5)
    .map {
        return $0 * 2
    }
    .subscribe(onNext: {
        print($0)
    })
    .disposed(by: disposeBag)

the results will be the elements that are multiplied by 2

2
4
6
8
10

Flat Map

Flat Map tracks all the subscription happened to the observables.

struct Book {
    var pages: BehaviorRelay<Int>
}

let designPattern = Book(pages: BehaviorRelay(value: 450))
let linearAlgebra = Book(pages: BehaviorRelay(value: 300))

let book = PublishSubject<Book>()

book.asObservable()
    .flatMap {
        $0.pages.asObservable()
    }
    .subscribe(onNext: {
        print($0)
    })
    .disposed(by: disposeBag)

book.onNext(designPattern)
designPattern.pages.accept(600)

book.onNext(linearAlgebra)
linearAlgebra.pages.accept(400)

designPattern.pages.accept(500)

If we run this code,

450
600
300
400
500

as we can see, the printed out 'pages' are being updated when the subscription has occured.

Flat Map Latest

Flat map latest operator only observes the latest observable.

struct Book {
    var pages: BehaviorRelay<Int>
}

let designPattern = Book(pages: BehaviorRelay(value: 450))
let linearAlgebra = Book(pages: BehaviorRelay(value: 300))

let book = PublishSubject<Book>()

book.asObservable()
    .flatMapLatest {
        $0.pages.asObservable()
    }
    .subscribe(onNext: {
        print($0)
    })
    .disposed(by: disposeBag)

book.onNext(designPattern)
designPattern.pages.accept(100)

book.onNext(linearAlgebra)
designPattern.pages.accept(500)

linearAlgebra.pages.accept(600)

The results will be like:

450
100
300
600

as we can see, even though we have changed designPattern's pages to 500, but the flat map latest operator was only observing the latest observable(linearAlgebra) so that didn't print out.

profile
ᕙ(•̀‸•́‶)ᕗ

0개의 댓글