OpenSource/RxSwift
RxSwift#4-2 Operators Transforming Operators
malrang-malrang
2022. 7. 18. 22:40
RxSwift Transforming Operators
Transforming Operators
- Observable을 변형하는 Operator
.toArray()
- Observable의 독립적 요소들을 array로 넣는 가장 편리한 방법은 toArray를 사용하는 것이다.
let disposeBag = DisposeBag()
Observable.of("A", "B", "C")
.toArray()
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag)
- 요녀석은 array로 바뀐다고했다.
- 출력은 요렇게! ["A", "B", "C"]
.map()
- RxSwift의 map 연산자는 Observable 에서 동작한다는 점만 제외하면 Swift 표준 라이브러리의 map과 같다.
let disposeBag = DisposeBag()
Observable.of(1, 2, 3)
.map {
$0 * 10
}
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag)
- 요녀석 출력은 1, 2, 3 차례대로 출력된다.
- map 사용하던것처럼 사용하면 되겠다.
.flatMap
- Observable sequence의 각 요소를 Observable sequence에 투영하고 Observable sequence를 Observable sequence로 병합한다.
- 쉽게 말하면 Observable의 이벤트를 받아 새로운 Observable로 변환한다.
struct Student {
var score: BehaviorSubject<Int>
}
let disposeBag = DisposeBag()
let ryan = Student(score: BehaviorSubject(value: 80))
let charlotte = Student(score: BehaviorSubject(value: 90))
let student = PublishSubject<Student>()
student
.flatMap{
$0.score
}
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag)
student.onNext(ryan)
ryan.score.onNext(85)
student.onNext(charlotte)
ryan.score.onNext(95)
charlotte.score.onNext(100)
/* Prints:
80
85
90
95
100
*/
.flatMapLatest()
- 위의 flatMap()에서 가장 최신의 값만 확인하고싶을때 요녀석을 사용한다.
- flatMap과 동일하게 이벤트가 들어오면 새로운 Observable을 만든다. 하지만 새 Observable을 생성하면 자동적으로 이전의 Observable구독을 해지한다.
struct Student {
var score: BehaviorSubject<Int>
}
let disposeBag = DisposeBag()
let ryan = Student(score: BehaviorSubject(value: 80))
let charlotte = Student(score: BehaviorSubject(value: 90))
let student = PublishSubject<Student>()
student
.flatMapLatest {
$0.score
}
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag)
student.onNext(ryan)
ryan.score.onNext(85)
student.onNext(charlotte)
ryan.score.onNext(95)
charlotte.score.onNext(100)
/* Prints:
80
85
90
100
*/