marble diagrams를 이용해서 시간 흐름에 따라 값을 표현하는 방식으로 생명주기를 알아볼 수 있다. 시간은 왼쪽에서 오른쪽으로 흐른다.
next
이벤트를 통해서 각각의 요소(1,2,3)을 방출하는 그림.
3개의 tap 이벤트가 방출된 뒤 완전 종료된 그림. 이것을 completed
이벤트라 함.
1,2 요소가 방출된 뒤에 에러가 발생하고 완전 종료되었지만 error
이벤트를 통해 종료된 그림.
위 3개의 그림을 통해서 Observable은 next
이벤트를 통해서 계속해서 방출할 수 있으며 complete
와 error
이벤트를 방출해서 완전 종료된다.
방출이란? Observable이 계속해서 이벤트를 생성하는 과정을 뜻하는 표현
아래와 같이 3가지 방식으로 Observable을 생성할 수 있다.
1.just
: 단 하나의 요소를 갖는 Observable 생성
2. of
: 주어진 값을 타입추론해서 Observable 생성
3. from
: Array요소만 하나씩 방출해서 Observable 생성
생성만 하면 마치 인스턴스 객체 생성하기 전 클래스 처럼 정의만 되어있고 아무런 행동을 하지않는다. 그래서 이벤트를 방출하기 위해서는 구독(Subscribe
)를 해야한다.
.subscribe()
위에 잠깐 봤던 것 처럼 next()
이벤트로 요소들을 방출하면서 마지막에 completed
이벤트가 방출됐다.
.subscribe(onNext:)
일반적인 subscribe와 다르게 next
이벤트만 취해서 핸들링하겠다는 의미로 다른 이벤트들은 모두 무시하게 된다. 출력에서도 next(1) 이런 형식이 아닌 값만 출력된다.
Observable.subscribe(onNext: { (value) in
print(value)
})
// 1
// 2
// 3
completed
이벤트만 방출된다. 주의해야할 점으로는 요소가 없어서 타입추론이 불가능하기 때문에 반드시 타입을 명시해주어야 한다..empty()
를 사용할 수 있다.let observable = Observable<Void>.empty()
Observable.subscribe(onNext: { (value) in
print(value)
})
// Completed
위 예제처럼 .empty()
구독한 Observable은 Completed
이벤트만 방출한다.
.empty()
와 반대로 completed
조차 출력되지 않는다.let observable = Observable<Void>.never()
start
부터 count
크기만큼의 값을 갖는 Observable을 생성한다.let observable = Observable<Int>.range(start: 1, count: 5)
observable.subscribe(
onNext: { (value) in
print(value)
}
)
// 1
// 2
// 3
// 4
// 5