티스토리 뷰

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
*/
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함