본문 바로가기

개발/RxSwift

[RxSwift] Observable 생성 연산자

반응형
 

ReactiveX - Operators

연산자 소개 ReactiveX를 지원하는 언어 별 구현체들은 다양한 연산자들을 제공하는데, 이 중에는 공통적으로 제공되는 연산자도 있지만 반대로 특정 구현체에서만 제공하는 연산자들도 존재한다

reactivex.io

Observable 연산자

Observable 생성 연산자

  • Create 
    직접적인 코드 구현을 통해 옵저버 메소드를 호출해 Observable을 생성한다
    create는 Cancelable 프로토콜을 따르기 때문에 Disposable 형태를 반환해야한다.
    Observable<Int>
        .create { observable in
            observable.onNext(0)
            observable.onNext(1)
            observable.onNext(2)
            observable.onCompleted()
            return Disposables.create()
        }
        .subscribe { item in
            switch item {
            case .next(let value):
                print(value)
            default:
                print("finished")
            }
        }
        .disposed(by: disposeBag)
     
  • Deferred
    옵저버가 구독하기 전까지는 Observable 생성을 지연하고 구독이 시작되면 옵저버 별로 새로운 Observable을 생성한다
    var flag : Bool = false
    
    // 외부 조건에 따라 다른 Observable을 제공
    Observable<Int>
        .deferred {
            flag.toggle()
        
            return flag ? Observable.from([1,2,3]) : Observable.from([4,5,6])
        }
        .subscribe { item in
            switch item {
            case .next(let value):
                print(value)
            default:
                print("finished")
            }
        }
        .disposed(by: disposedBag)

  • Empty / Never / Throw
    아주 정확하고 제한된 행동을 하는 Observable을 생성한다
    // complete을 내며 정상 종료되는 Observable
    Observable<Int>.empty()
    
    // 이벤트를 방출하지 않으며 종료하지 않는 Observable
    Observable<Int>.never()
    
    // error를 내며 이벤트를 방출하지 않는 Observable
    Observable<Int>.throw()

  • From / Of
    2개 이상의 이벤트를 전달하는 것에 사용되며 다른 객체나 자료 구조를 Observable로 변환한다.
    Of는 Observable<타입> 자체를 반환하고 From은 배열 안의 요소들을 Observable로 반환한다.
    let ofArray = Observable.of([1,2,3])
    
    let fromArray = Observable.from([1,2,3])
  • Interval
    특정 시간별로 연속되는 정수형을 배출하는 Observable을 생성한다.
    Observable<Int>
        .interval(.seconds(10), scheduler: MainScheduler.instance)
        .subscribe { print($0) }
        .disposed(by: disposedBag)
  • Timer 
    지정된 시간이 지나고 난 후 항목을 하나 배출하는 Observable을 생성한다
    // period: 후속 값을 산출하는 시간
    Observable<Int>
        .timer(.seconds(10), period: .seconds(60), scheduler:MainScheduler.instance)
        .subscribe { print($0) }
        .disposed(by: disposedBag)
  • Just
    주어진 객체 하나 또는 객체 집합을 Observable로 변환한다. 변환된 Observable은 원본 객체들을 발행한다
    Observable.just(1)
    Observable.just("hi")
  • Range
    시작 값부터 지정한 개수만큼 1씩 증가시킨 값의 정수를 발행하는 Observable을 생성한다
    Observable
        .range(start: 10, count: 5)
        .subscribe { print($0) }
        .disposed(by: disposedBag)
    
    // next(10)
    // next(11)
    // next(12)
    // next(13)
    // next(14)
    // completed
  • Repeat
    특정 항목이나 연속된 항목들을 반복적으로 배출하는 Observable을 생성한다.
    무한으로 생성하기에 take(count:) 메소드로 개수를 조절한다.
    Observable
        .repeatElement("HEHE")
        .take(5)
        .subscribe { print($0) }
        .disposed(by: disposedBag)

 

 

반응형

'개발 > RxSwift' 카테고리의 다른 글

[RxSwift] Combining Observables & Error Handling Operators  (0) 2022.03.14
[RxSwift] Filtering Observable  (0) 2022.03.11
[RxSwift] Transforming Observable  (0) 2022.03.10
[RxSwift] Observables  (0) 2022.03.08
[RxSwift] Traits, Subject, Scheduler  (0) 2022.03.07