Tunko Development Diary

RxSwift) Creating Operators 1. (just, of, from, range, generate) 본문

카테고리 없음

RxSwift) Creating Operators 1. (just, of, from, range, generate)

Tunko 2022. 5. 31. 15:21

옵저버블을 생성하는 연산자 입니다.

Just

let disposeBag = DisposeBag()
let element = "👍"
Observable.just(element)
    .subscribe { event in print(event)}
    .disposed(by: disposeBag)
Observable.just(["👍", "👊", "👎"])
    .subscribe { event in print(event)}
    .disposed(by: disposeBag)

출력

next(👍)
completed
next(["👍", "👊", "👎"])
completed

Just 연산자는 옵저버블을 생성하면서 요소를 방출합니다. 배열로 된 요소도 한번에 방출하게 됩니다.

Of

let disposeBag = DisposeBag()
let emoticon1 = "⭐️"
let emoticon2 = "🌙"
let emoticon3 = "🌎"

Observable.of(emoticon1, emoticon2, emoticon3)
    .subscribe { print($0) }
    .disposed(by: disposeBag)

출력

next(⭐️)
next(🌙)
next(🌎)
completed

Of 연산자는 옵저버블을 생성하면서 내부에 요소를 순차적으로 방출합니다.

from

let disposeBag = DisposeBag()
let emoticons = ["😀", "😃", "😄", "😁"]

Observable.from(emoticons)
    .subscribe { print(emoticons) }
    .disposed(by: disposeBag)

출력

next(😀)
next(😃)
next(😄)
next(😁)
completed

from 연산자는 배열로 받은 요소를 하나씩 방출합니다.

range

let disposeBag = DisposeBag()

Observable.range(start: 1, count: 5)
    .subscribe { print($0) }
    .disposed(by: disposeBag)

출력

next(1)
next(2)
next(3)
next(4)
next(5)

range 연산자는 지정된 숫자 만큼 객체를 방출합니다. 반드시 정수를 전달해야합니다. range 연산자는 시작 값부터 1씩 증가하는 연산자 입니다. 증가의 폭의 변경이나 감소를 할 수는 없습니다.

generate

let disposeBag = DisposeBag()
Observable.generate(initialState: 0,
										 condition: { $0 <= 18 },
										 iterate: { $0 + 3 })
    .subscribe{ print($0) }
    .disposed(by: disposeBag)

출력

next(0)
next(3)
next(6)
next(9)
next(12)
next(15)
next(18)
completed

generate 연산자는 초기 값을 증가시키면서 방출 결과를 조정할 수 있습니다.

public static func generate(initialState: Element, condition: @escaping (Element) throws -> Bool, scheduler: ImmediateSchedulerType = CurrentThreadScheduler.instance, iterate: @escaping (Element) throws -> Element) -> Observable<Element> {
        Generate(initialState: initialState, condition: condition, iterate: iterate, resultSelector: { $0 }, scheduler: scheduler)
    }
  • initialState : 시작값
  • condition : true 일때만 값을 방출
  • iterate : 방출된 값을 변경하는 클로저
  • scheduler : 스케쥴 파라미터 (다음에 내용 추가 예정)
반응형
Comments