하나의 항목을 방출하는 observable 생성
Observable.just(element)
let disposeBag = DisposeBag()
let element = "hi"
Observable.just(element) // observable 생성
/* 구독 */.subscribe{event in print(event)}
.disposed(by: disposeBag)
Observable.just([1, 2, 3])
.subscribe { event in print(event) }
.disposed(by: disposeBag)
// >> 1,2,3 방출
2개 이상의 요소 방출
Observable.of("hi", "bye) Observable.of([1, 2], [3, 4], [5, 6]) // >> next 이벤트가 요소 수만큼 전달됨!
배열로 받은 요소를 하나씩 순서대로 방출
Observable.from([1,2,3,4,5]) //>> next(1) // next(2) // next(3) // next(4) // next(5)
정수를 지정된 수만큼 방출
Observable.range(start: 1, count: 10) // >> next(1), next(2), next(3), next(4), next(5), next(6), next(7), next(8), next(9), next(10)
증가 / 감소 폭을 변경할 수 있는 시퀀스 방출
Observable.generate(initialState: 0, condition: {$0 <= 10}, iterate: {$0 + 2})
동일한 요소를 반복적(무한)으로 방출하는 옵져버블 생성
Observable.repeatElement(element)
Observable.repeatElement(element)
.take(7)
.subscribe {print($0)}
.disposed(by: disposeBag)
// >> 7개요소 방출 이후 completed event 방출
특정 조건에 따라 옵져버블 생성
let factory: Observable<String> = Observable.deferred { flag.toggle() if flag { return Observable.from(animals) // 배열에 있는 요소들이 개별적으로 방출 } else { return Observable.from(fruits) } } factory .subscribe {print($0)} .disposed(by: disposeBag) factory .subscribe {print($0)} .disposed(by: disposeBag) // >> animals 요소들의 이벤트 방출 이후 fruits 요소들의 이벤트 방출조금
옵져버블이 동작하는 방식을 직접 구현
Observable<String>.create { (observer) -> Disposable in guard let url = URL(string: "https://www.apple.com") else { // error observer.onError(MyError.error) return Disposables.create() } guard let html = try? String(contentsOf: url, encoding: .utf8) else { // error return Disposables.create() } observer.onNext(html) // 정상적 문자열 방출 observer.onCompleted() return Disposables.create() // 모든 리소스 정리, 옵져버블 정상적으로 종료 } .subscribe{print($0)} .disposed(by: disposeBag)
Disposables.create()
사용onNext(방출할 요소)
onError, onCompleted
를 반드시 호출해야 함 completed event 를 전달하고 종료하는 observable 생성
Observable<Void>.empty() // >> completed()
error event 를 전달하고 종료하는 observable 생성
enum MyError: Error { case error } Observable<Void>.error(MyError.error) // >> error(error)