Observable을 생성하기 위해서 사용하는 Operator 입니다.
create함수는 클로저로 전달받은 Observer에 데이터를 전달하는 함수 입니다.
클로저로 전달받는 Observer는 subscribe함수를 통해 전달 됩니다.
let observable = Observable<String>.create {
$0.onNext("Hello")
$0.onNext("World")
$0.onCompleted()
return Disposables.create()
}
observable.subscribe(onNext: {
print($0)
})
// Hello
// World
subscribe 했을 때 deferred로 전달한 클로저를 실행해 새로운 Observable을 만드는 함수 입니다.
let observable = Observable<String>.deferred {
Observable<String>.create {
$0.onNext("Hello")
$0.onNext("World")
$0.onCompleted()
return Disposables.create()
}
}
observable.subscribe(onNext: {
print($0)
})
// Hello
// World
// empty 데이터가 비어있어서 완료만 전달하는 함수
let observable = Observable<String>.empty()
observable.subscribe(onNext: {
print($0)
}, onCompleted: {
print("onCompleted")
})
// onCompleted
// never 아무 이벤트도 전달하지 않는 함수
let observable = Observable<String>.never()
observable.subscribe(onNext: {
print($0)
}, onCompleted: {
print("onCompleted")
})
// 아무것도 나오지 않음
// throw 에러를 전달하는 함수
enum TestError: Error {
case A;
}
let observable = Observable<String>.error(TestError.A)
observable.subscribe(onNext: {
print($0)
}, onError: {
print("onError: \\($0)")
}, onCompleted: {
print("onCompleted")
})
// onError: A
파라미터로 전달한 RxTimeInterval 값 만큼 period를 가지고 0부터 n까지 Int값을 전달하는 함수입니다.
let dispatchGroup = DispatchGroup()
dispatchGroup.enter()
let observable = Observable<Int>.interval(RxTimeInterval.milliseconds(1000), scheduler: MainScheduler.instance)
observable.subscribe(onNext: {
print($0)
if $0 == 10 {
dispatchGroup.leave()
}
}, onError: {
print("onError: \\($0)")
}, onCompleted: {
print("onCompleted")
})
dispatchGroup.notify(queue: DispatchQueue.main) {
exit(EXIT_SUCCESS)
}
dispatchMain()
// 0
// 1
// 2
// 3
// 4
// 5
// 6
// 7
// 8
// 9
// 10
start부터 count 만큼 1씩 증가한 숫자를 만드는 함수 입니다.
let observable = Observable<Int>.range(start: 2, count: 3)
observable.subscribe(onNext: {
print($0)
}, onCompleted: {
print("onCompleted")
})
// 2
// 3
// 4
// onCompleted