ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Transforming Operators
    RxSwift 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

    댓글

Designed by Tistory.