ToArray
Map
FlatMap
FlatMapLatest
변환 연산자를 쓰는 목적
Obervable data를 새로운 sequence로 변경하고
원하는 sequece로 변환 시키기 위해서 사용한다.
다른 말로
간단히 데이터를 변형시켜 다른 데이터로 만듦
ToArray
각각의 배열요소를 array형태로 만든다.
Observable.of(1,2,3,4,5)
.toArray()
.subscribe({
print($0)
})
.disposed(by: disposeBag)
element를 Array로 변환한 것을 볼 수 있다.
() -> []
Map
기본적으로 map {주어진 식}
표현으로 표기되는데
map은 주어진 식을 통해 새로운 sequence를 만든다.
Observable.of(1,2,3,4,5)
.map { return $0 * 2 }
.subscribe(onNext: {
print($0)
}).disposed(by: disposeBag)
FlatMap
이해하기 어려울 수 있는데
기존에 있던 sequece가 flatmap을 만나서 변환이 되는데
변환이후의 것들을 newsequence로 형성한다(변경되는 값을 추적할 수 있다.)
예로 이해를 해보면
let disposeBag = DisposeBag()
struct Student {
var score: BehaviorRelay<Int>
}
let chassi = Student(score: BehaviorRelay(value: 90))
let young = Student(score: BehaviorRelay(value: 20))
let ming = Student(score: BehaviorRelay(value: 50))
let student = PublishSubject<Student>()
student.asObservable()
.flatMap { $0.score.asObservable() }
.subscribe(onNext: {
print($0)
}).disposed(by: disposeBag)
student.onNext(chassi)
여기서 추측해 볼수 있는 값은 chassi의 값을 추출하는 것인데 90
추가로 위 값들을 변경하는 메서드를 진행해보면
chassi.score.accept(91)
student.onNext(ming)
ming.score.accept(10)
chassi.score.accept(100)
chassi는 90이후로 변경된 값 91,
ming은 50->10으로 변경되고
마지막으로 다시 chassi를 100으로 변경한 값을
그대로 추적하는 것을 볼 수 있다.
FlatMapLatest
마지막에(가장 최근에) FlatMapLatest로 추적한 sequnce만 추적한다.
위와 동일한 코드인데 flatMapLatest로 변경했다.
import UIKit
import RxSwift
import RxCocoa
let disposeBag = DisposeBag()
struct Student {
var score: BehaviorRelay<Int>
}
let chassi = Student(score: BehaviorRelay(value: 90))
let young = Student(score: BehaviorRelay(value: 20))
let ming = Student(score: BehaviorRelay(value: 50))
let student = PublishSubject<Student>()
student.asObservable()
.flatMapLatest { $0.score.asObservable() }
.subscribe(onNext: {
print($0)
}).disposed(by: disposeBag)
student.onNext(chassi) // 시퀀스 생성
chassi.score.accept(100) // 시퀀스 추적가능
student.onNext(young) // 시퀀스 변경
chassi.score.accept(10) // 마지막에대해서만 반응
chassi에 대해서 처음 sequence생성된 값 90->100은 추적 가능하지만
시퀀스가 새롭게 young으로 추가되고 다시 chassi에 대한 값을 추적하면 추적이 불가능하다.
마지막에 들어온 sequence에 대해서만 반응하므로, young이 추적가능하다.
'iOS > RxSwift' 카테고리의 다른 글
[RxSwift] Combining Operators (1) | 2022.11.02 |
---|---|
[RxSwift] Filtering Operator (0) | 2022.10.27 |
[RxSwift] Subject에 관하여 (0) | 2022.10.25 |
[RxSwift] Observable, Dispose, Create로 subscribe하기 (0) | 2022.10.25 |