개별 원소 → 하나의 배열로

example(of: "toArray") {
Observable.of(1,2,3,4,6)
.toArray()
.subscribe{
print($0)
}.disposed(by: disposeBag)
}
/*
--- Example of:toArray---
success([1, 2, 3, 4, 6])
*/
이벤트를 조작하여 새로운 값으로 바꿔줌 ( 기존 맵과 동일함)

example(of :"map")
{
let formatter = NumberFormatter()
formatter.numberStyle = .spellOut
Observable.of(123,4,56,78)
.map{
formatter.string(from: $0 as! NSNumber)!
}.subscribe{
print($0)
}.disposed(by: disposeBag)
}
/*
--- Example of:map---
next(one hundred twenty-three)
next(four)
next(fifty-six)
next(seventy-eight)
completed
*/
index가 3의 배수인 것만 출력하고 나머지는 0으로 방출
example(of: "map + enumereated") {
Observable.of(1,2,3,4,5,6,7,8)
.enumerated()
.map { (index: Int, element: Int) in
if index % 3 == 0{
return (index,element)
}
return (index,0)
}.subscribe(
onNext:{print($0)}
).disposed(by: disposeBag)
}
--- Example of:map + enumereated---
(0, 1)
(1, 0)
(2, 0)
(3, 4)
(4, 0)
(5, 0)
(6, 7)
(7, 0)
새로운 Observable를 생성하여 변경 Obaservable<String>.just(Strint($0))
map → event 값을 변경
flatMap → observable 자체를 변경한다는 차이가 있음
example(of: "flatMap vs Map") {
Observable<Int>.just(10)
.map{ element in
String(element)
}.subscribe{
print($0)
}.disposed(by: disposeBag)
Observable<Int>.just(10)
.flatMap { element in
Observable<String>.just(String(element))
}.subscribe{
print($0)
}.disposed(by: disposeBag)
}
FlatMap과는 다르게 가장 최신으로 만들어진 Sequence만 Emit다.
example(of :"faltMapLatest"){
let js = Student(score: BehaviorSubject(value: 80))
let jh = Student(score: BehaviorSubject(value: 90))
let student = PublishSubject<Student>()
student
.flatMapLatest{
$0.score
}.subscribe(
onNext:{print($0)}
).disposed(by: disposeBag)
student.onNext(js)
js.score.onNext(85)
student.onNext(jh)
js.score.onNext(95)//js가 방출한 이벤트는 더이상 emit하지 않음
jh.score.onNext(100)
}
/*
--- Example of:faltMapLatest---
80
85
90
100
**/
→ 이벤트 타입으로 변환 후, Observable 형으로 나타내는 것 Observable<Event<Int>>