번역된 글이라 설명이 매끄럽진 않지만. 목록을 보기 위해 캡쳐해왔다.
(출처는 글 하단에 기재)
하나씩 사용하여 Observable을 생성해보자.
Observable.create { observer -> Disposable in
observer.onNext(1)
observer.onNext(2)
observer.onCompleted() //<- 여기서 종료됨
observer.onNext(3) //<- 방출안됨
return Disposables.create()
}.subscribe(onNext: { // 구독
print($0)
}, onError: {
print($0)
}, onCompleted: {
print("Completed")
}, onDisposed: {
print("Disposed")
})
.dispose()
출력
1
2
Completed
Disposed
observer.onNext(3)은 onCompleted() 된 이후이기 때문에 방출되지 않는다.
Observable.deferred {
Observable.of(1, 2, 3)
}
.subscribe{
print($0)
}
.dispose()
출력
next(1)
next(2)
next(3)
completed
→ 내부에 있는 Observable을 구독한 것과 유사하게 동작한다.
public static func deferred(_ observableFactory: @escaping () throws -> Observable<Element>)
-> Observable<Element> {
Deferred(observableFactory: observableFactory)
}
observableFactory
Observable을 감싸는 또 다른 Observable
var isDay: Bool = false
let factory: Observable<String> = Observable.deferred {
isDay = !isDay
// 조건문에 따라 다른 Observable을 리턴할 수 있다.
if isDay {
return Observable.of("🌞")
} else {
return Observable.of("🌙")
}
}
for _ in 0...3 {
factory.subscribe(onNext: {
print($0)
})
.dispose()
}
출력
🌞
🌙
🌞
🌙
상태에 따라 다른 데이터를 처리해야할 필요가 있을 경우 사용
Observable.empty()
.subscribe{
print($0)
}
.dispose()
→ 출력 없음 (아무것도 안나옴, completed도 안나옴)
이렇게 하면 출력 나옴
Observable.empty()
.subscribe(
onNext: {
print($0)
},
onCompleted: {
print("Completed")
})
.dispose()
출력
Completed
항목을 방출하지 않고 종료되지 않는 Observable 생성
Observable.never()
.subscribe(
onNext: {
print($0)
},
onCompleted: {
print("Completed")
})
.dispose()
→ 출력 없음
디버그를 통해서만 작동 여부를 확인할 수 있음
Observable.never()
.debug("never") //← 디버그
.subscribe(
onNext: {
print($0)
},
onCompleted: {
print("Completed")
})
.dispose()
출력
2022-11-30 00:58:24.688: never -> subscribed
2022-11-30 00:58:24.697: never -> isDisposed
항목을 방출하지 않고 오류와 함께 종료되는 Observable 생성
하나의 element만 방출, 오직 하나의 요소만을 포함하는 Observable 생성
Observable.just(1)
.subscribe {
print($0)
}
.dispose()
출력
next(1)
completed
특정 범위의 순차 정수를 방출하는 Observable 생성
Start부터 Count크기 만큼의 값들을 순차적으로 방출한다.
for문 같다.
Observable.range(start: 1, count: 5)
.subscribe {
print($0)
}
.dispose()
출력
next(1)
next(2)
next(3)
next(4)
next(5)
completed
하나 이상의 요소를 넣을 수 있음, 순차적
Observable.of(1, 2, 3)
.subscribe {
print($0)
}.dispose()
출력
next(1)
next(2)
next(3)
completed
💡 of에 배열을 넣으면 하나의 Array타입으로 인식함
Observable.of([1, 2, 3])
.subscribe({
print($0)
})
.dispose()
// 출력
// next([1, 2, 3])
// completed
// Observable<Array>.of([1, 2, 3]) ----- 하나의 Array 타입으로 인식
// Observable.just([1, 2, 3]) ----- just와 동일하게 동작한다.
Array의 각 element들을 하나씩 방출
Observable.from([1, 2, 3])
.subscribe {
print($0)
}
.dispose()
출력
next(1)
next(2)
next(3)
completed