-
Transforming OperatorsRxSwift 2021. 8. 5. 14:58
toArray Operator
map Operator
flatMap, flatMapFirst, flatMapLatest Operator
https://kkimin.tistory.com/40?category=955083
자주 쓰여 따로 정리해 두었다.
let disposeBag = DisposeBag() let a = BehaviorSubject(value: 1) let b = BehaviorSubject(value: 2) let subject = PublishSubject<BehaviorSubject<Int>>() subject .flatMap { $0.asObservable() } // subject to Observable .subscrie { print($0) } .dispose(by: disposeBag) subject.onNext(a) subject.onNext(b) a.onNext(11) b.onNext(22) // update 된것도 구독자에 전달 // flatMapFirst에서는 b(value 2)는 전달하지 않음. 22도 전달 하지 않음 // flatMapLatest로 바꾸면 b 로 바뀌고 나서 a의 11을 전달하지 않음
scan Operator
buffer Operator
let disposeBag = DisposeBag() Observable<Int>.interval(.seconds(1), scheduler: MainScheduler.instance) .buffer(timeSpn: .seconds(5), count: 3, scheduler: MainScheduler.instance) .take(5) .subscrie { print($0) } .dispose(by: disposeBag) // buffer를 2초로 하면 2초 후에 한번에, 5초로 하면 5초가 되기 전에
window Operator
let disposeBag = DisposeBag() Observable<Int>.interval(.seconds(1), scheduler: MainScheduler.instance) .buffer(timeSpn: .seconds(5), count: 3, scheduler: MainScheduler.instance) .take(5) // 무한대로 할 수 없으니 제한 .subscrie { print($0) if let observable = $0.element{ observable.subscrie { print("inner: ", $0) } } } .dispose(by: disposeBag) // buffer는 배열, window는 observable로 return, // 이것도 동일하게 2초로 설정하면 2초 안에 Max 못채우면 max까지 채우지 않고 방출 // 5초로 설정하면 max가 채워지니까 5초까지 기다리지 않고 방출
groupBy Operator
let disposeBag = DisposeBag() let words = ["Apple", "Banana", "Orange"] Observable.from(words) .groupBy { $0.count } .flatMap { $0.toArray() } // 이렇게 하면 깔끔 .subscribe { print($0) } //.subscribe(onNext: { groupedObservable in //print("== \(groupedObservable.key)") //groupedObservable.subscribe { print($0)} //}) 이런식으로 해도 되고 .disposed(by: disposeBag) // key Hashable로 한정. 그룹은 개별 Observable로 방출 // 문자열 크기로 그룹해서 observable로 return 함
728x90'RxSwift' 카테고리의 다른 글
Scheduler (0) 2021.08.10 Combining Operators (0) 2021.08.06 RxSwift Observable (0) 2021.07.14 RxSwift 스터디 계획 따라가기 (0) 2021.07.12 RxSwift Subject (0) 2021.07.09