Rx.playground 파일에서 Creating and Subscribing to Observables 을 실행해보자.
Creating and Subscribing to Observables
There are several ways to create and subscribe to Observable sequences.
Operatings > Creators > Empty/Never
#empty
Creates an empty Observable sequence that only emits a Completed event.
empty는 아무 것도 emit하지 않는 옵저버블을 생성하지만 정상적으로 종료시킨다. 즉, 빈 값으로 종료 시키는 것이다.
✅ 즉시 종료 되는 옵저버블을 만들고 싶거나,
✅ 빈 값을 반환하고 싶을 때 사용한다.
example("empty") {
let disposeBag = DisposeBag()
Observable<Int>.empty()
.subscribe { event in
print(event)
}
.disposed(by: disposeBag)
}
위의 코드를 실행하면
시작하고 끝이 나는데, 그 과정에서 아무것도 반환하지 않는다.
#never
Creates a sequence that never terminates and never emits any events.
never은 아무것도 emit하지 않고 종료되지도 않는다. 즉, 무한한 상태를 의미한다.
example("never") {
let disposeBag = DisposeBag()
let neverSequence = Observable<String>.never()
let neverSequenceSubscription = neverSequence
.subscribe { _ in
print("This will never be printed")
}
neverSequenceSubscription.disposed(by: disposeBag)
}
위의 코드를 실행하면
이렇게 아무것도 반환하지 않고 끝나지 않는 것을 볼 수 있다.
Operatings > Creators > Just
#just
Creates an Observable sequence with a single element.
Just는 바로 그 아이템을 방출하는 Observable로 변환한다.
Just는 From과 비슷하지만 From은 배열이나 반복 가능한 항목 또는 그와 같은 종류의 항목으로 하나씩 내보낼 항목을 꺼내는 반면 Just는 배열이나 반복 가능한 항목 또는 가진 것을 그대로 단일 항목으로 내보낸다.
(예를 들어서 ["a", "b", "c"]라는 배열 항목이 있을 때, Just의 경우 ["a", "b", "c"] 이렇게 하나로 반환하는 한편, From은 "a" 방출되고, "b"방출되고, "c"가 방출된다.)
example("just") {
let disposeBag = DisposeBag()
Observable.just("🔴")
.subscribe { event in
print(event)
}
.disposed(by: disposeBag)
}
모든 이벤트 유형(다음, 오류 및 완료)에 대해 이벤트 처리기를 구독하는 subscribe(_:)와 달리 subscribe(onNext:)는 오류 및 완료 이벤트를 무시하고 다음 이벤트 요소만 생성하는 요소 처리기를 구독한다.
이벤트 유형만 구독하려면 구독(error:) 및 구독(onCompleted:) 방법도 있습니다. 또한 구독(onNext:onError:onCompleted:onDisposed:) 메서드가 있습니다. 이 메서드를 사용하면 하나 이상의 이벤트 유형에 대응하고 구독이 어떤 이유로든 종료되거나 삭제될 때 단일 호출에서 응답할 수 있다.
위의 코드를 실행하면
이렇게 요소들이 출력 되는 것을 볼 수 있다.
just와 of의 차이는 여러 아이템을 보낼 수 있는가 없는가의 차이이다.
just에서 배열 하나의 요소가 아닌 각 문자 여러개를 보내려고 하면 위와 같이 오류가 나타나는 것을 볼 수 있다.
반면에 of의 경우 여러 요소를 한번에 보낼 수 있다.
#from
Creates an Observable sequence from a Sequence, such as an Array, Dictionary, or Set