KxCoding의 Mastering RxSwift 유투브를 보며 공부한 내용을 정리
just, of, from
(1) just
- 하나의 항목을 방출하는 Observable 생성 시 사용
※ 중요 : 파라미터로 전달한 요소를 그대로 방출
[코드]
let disposeBag = DisposeBag()
let element = "😀"
Observable.just(element)
.subscribe { event in print(event) }
.disposed(by: disposeBag)
Observable.just([1, 2, 3])
.subscribe { event in print(event) }
.disposed(by: disposeBag)
[출력]
next(😀)
completed
next([1, 2, 3])
completed
(2) Of
- 두 개 이상의 항목을 방출하는 Observable 생성 시 사용
※ 중요 : 파라미터로 전달한 요소를 그대로 방출
[코드]
let disposeBag = DisposeBag()
let apple = "🍏"
let orange = "🍊"
let kiwi = "🥝"
// next이벤트가 3번 방출 후 completed
Observable.of(apple, orange, kiwi)
.subscribe { element in print(element) }
.disposed(by: disposeBag)
// 배열이 그대로 방출
// 배열의 인자를 하나씩 방출하고 싶다면 어떻게 해야할까? -> from
Observable.of([1, 2], [3, 4], [5, 6])
.subscribe { element in print(element) }
.disposed(by: disposeBag)
[출력]
next(🍏)
next(🍊)
next(🥝)
completed
next([1, 2])
next([3, 4])
next([5, 6])
completed
(3) From
- 배열 안 요소를 하나씩 방출하고 싶을 때 사용
[코드]
let disposeBag = DisposeBag()
let fruits = ["🍏", "🍎", "🍋", "🍓", "🍇"]
// 파라미터를 배열로 받아 하나씩 방출
Observable.from(fruits)
.subscribe { element in print(element) }
.disposed(by: disposeBag)
[출력]
next(🍏)
next(🍎)
next(🍋)
next(🍓)
next(🍇)
completed
Filter
- 조건에 해당하는 데이터만 뽑아낼 때 사용
[코드]
짝수만 출력하는 코드
let disposeBag = DisposeBag()
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Observable.from(numbers)
.filter { $0.isMultiple(of: 2) }
.subscribe { print($0) }
.disposed(by: disposeBag)
[출력]
next(2)
next(4)
next(6)
next(8)
next(10)
completed
FlatMap
- 원본 Observable이 항목을 방출하면 FlatMap연산자가 변환함수를 실행
- 변환함수는 방출된 항목을 Observable로 변환
- 방출된 항목의 값이 바뀌면 flatmap연산자가 반환한 Observable이 새로운 항목을 방출(ex : 빨간색 다이아몬드 두 개)
- 모든 Observable이 방출하는 항목을 모아서 최종적으로 하나의 Observable 리턴
- 개별항목이 개별 Observable로 변환되었다가 다시 하나의 Observable로 합쳐짐
[코드]
let a = BehaviorSubject(value: 1)
let b = BehaviorSubject(value: 2)
//BehaviorSubject를 방출하는 PublishSubject생성
let subject = PublishSubject<BehaviorSubject<Int>>()
//구독자로 전달되는 것은 BehaviorSubject
subject
.flatMap{ $0.asObservable() } //Subject -> Observable
.subscribe{ print($0) }
.disposed(by: disposeBag)
subject.onNext(a)
subject.onNext(b)
a.onNext(11)
b.onNext(22)
※ BehaviorSubject
- 무조건 초기값을 가지고 초기화해야 함
- Subscribe가 발생 시, 구독 이전에 발생한 이벤트 중 가장 최신의 이벤트를 전달받음
'iOS' 카테고리의 다른 글
[스탠포드iOS] Swift 기초문법 정리(Method, Property) (0) | 2024.03.16 |
---|---|
[스탠포드iOS] Swift 기초문법 정리(Optional, Tuple, Data Structure) (1) | 2024.03.16 |
RxSwift(1) (0) | 2020.04.03 |
MVVM패턴 (0) | 2020.04.02 |