์ ๋ค๋ฆญ ๊ตฌ์กฐ์ฒด | Publisher์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋ ํน์ ํด๋ก์ ๋ฅผ ์ํํ๋ Publisher
์ด๋์
๋ผ์ด์ ๋ ์ฌ์ฏ ๊ฐ์ ์ธ์๋ฅผ ๋ฐ๋๋ค.
upstream
: ์์์ ํ๋ฅด๋ Publisher
receiveSubscription
: Publisher๊ฐ ์์ Publisher๋ก๋ถํฐ ๊ตฌ๋
์ ์ ๋ฌ๋ฐ์ ๋ ์ํํ ํด๋ก์ . ๊ธฐ๋ณธ๊ฐ์ nil
receiveOutput
: Publisher๊ฐ ์์ Publisher๋ก๋ถํฐ ๊ฐ์ ์ ๋ฌ๋ฐ์ ๋ ์ํํ ํด๋ก์ . ๊ธฐ๋ณธ๊ฐ์ nil
receiveCompletion
: Publisher๊ฐ ์์ Publisher๋ก๋ถํฐ ์๋ฃ๋ฅผ ์ ๋ฌ๋ฐ์ ๋ ์ํํ ํด๋ก์ . ๊ธฐ๋ณธ๊ฐ์ nil
receiveCancel
: ํ์ ๋ฆฌ์๋ฒ๊ฐ ๋ฐํ์ ์ทจ์ํ ๋ ์ํํ ํด๋ก์ . ๊ธฐ๋ณธ๊ฐ์ nil
receiveRequest
: Publisher๊ฐ ๋ ๋ง์ ์์๋ฅผ ์ํด ์์ฒญ์ ์ ๋ฌ๋ฐ์ ๋ ์ํํ ํด๋ก์ . ๊ธฐ๋ณธ๊ฐ์ nil
์คํธ๋ฆผ์ ์๋ช
์ฃผ๊ธฐ ๋์ ๋ฐ์ํ๋ ์ฌ๋ฌ ์ด๋ฒคํธ์์ ์คํํ ์ก์
์ ๋ฑ๋กํ๋ค.
ํน์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋ ํน์ ์์
์ ์ํํ๊ธฐ ์ํด ์ฌ์ฉํ ์ ์๋ค.
Publisher์ ์๋ช
์ฃผ๊ธฐ๋ฅผ ์ดํดํ๊ธฐ ์ํด ์ฌ์ฉํ ์ ์๋ค.
sink
๋ Subscriber์ ๋ํ ์คํผ๋ ์ดํฐ๊ณ , handleEvents
๋ Publisher์ ๋ํ ์คํผ๋ ์ดํฐ๋ค.
sink
๋ Subscriber์ ๊ตฌ๋
์ ์ํด ์ต์ข
์ ์ผ๋ก ๋ฐํ๋ ์ด๋ฒคํธ์ ๋ํด ๋์ํ๋ค.
handleEvents
๋ ๊ตฌ๋
์ ์ํด ์์ Publisher๊ฐ ๋ฐํํ๋ ์ด๋ฒคํธ์ ๋ํด ๋์ํ๋ค.
handleEvents
์คํผ๋ ์ดํฐ์ ๊ด๋ จ์ด ์๋ค.
// Publishers.HandleEvents Publisher
Publishers
.HandleEvents(upstream: Just(Void()),
receiveSubscription: { _ in print("Combine HandleEvents ReceiveSubscription") },
receiveOutput: { print("Combine HandleEvents ReceiveOutput") },
receiveCompletion: { _ in print("Combine HandleEvents ReceiveCompletion") },
receiveCancel: { print("Combine HandleEvents ReceiveCancel") },
receiveRequest: { _ in print("Combine HandleEvents ReceiveRequest") })
.sink(receiveCompletion: { completion in
switch completion {
case .failure:
print("Combine HandleEvents Error")
case .finished:
print("Combine HandleEvents Finish")
}
}, receiveValue: {
print("Combine HandleEvents")
})
.store(in: &cancellables)
// handleEvents Operator
Just(Void())
.handleEvents(receiveSubscription: { _ in print("Combine HandleEvents ReceiveSubscription") },
receiveOutput: { print("Combine HandleEvents ReceiveOutput") },
receiveCompletion: { _ in print("Combine HandleEvents ReceiveCompletion") },
receiveCancel: { print("Combine HandleEvents ReceiveCancel") },
receiveRequest: { _ in print("Combine HandleEvents ReceiveRequest") })
.sink(receiveCompletion: { completion in
switch completion {
case .failure:
print("Combine HandleEvents Error")
case .finished:
print("Combine HandleEvents Finish")
}
}, receiveValue: {
print("Combine HandleEvents")
})
.store(in: &cancellables)
// Combine HandleEvents Receive Request
// Combine HandleEvents Receive Subscription
// Combine HandleEvents Receive Output
// Combine HandleEvents
// Combine HandleEvents Receive Completion
// Combine HandleEvents Finish
๊ฒฐ๊ณผ๋ฅผ ํตํด Publisher๋ ์๋ฌ๋ฅผ ๋ด์ง ์๋ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ ์์๋ก ๋์ํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
Publisher : Receive Request
Publisher : Receive Subscription
Publisher : Receive Output
Subscriber : Receive Value
Publisher : Receive Completion
Subscriber : Receive Finished
RxSwift
do
์คํผ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํ ์ ์๋ค.
Observable.just(Void())
.do(onNext: { print("RxSwift HandleEvents OnNext") },
afterNext: { print("RxSwift HandleEvents AfterNext") },
onError: { _ in print("RxSwift HandleEvents OnError") },
afterError: { _ in print("RxSwift HandleEvents AfterError") },
onCompleted: { print("RxSwift HandleEvents OnCompleted") },
afterCompleted: { print("RxSwift HandleEvents AfterCompleted") },
onSubscribe: { print("RxSwift HandleEvents OnSubscribe") },
onSubscribed: { print("RxSwift HandleEvents OnSubscribed") },
onDispose: { print("RxSwift HandleEvents OnDispose") })
.subscribe(onNext: {
print("RxSwift HandleEvents")
}, onError: { _ in
print("RxSwift HandleEvents Error")
}, onCompleted: {
print("RxSwift HandleEvents Finish")
})
.disposed(by: disposeBag)
// RxSwift HandleEvents OnSubscribe
// RxSwift HandleEvents OnNext
// RxSwift HandleEvents
// RxSwift HandleEvents AfterNext
// RxSwift HandleEvents OnCompleted
// RxSwift HandleEvents Finish
// RxSwift HandleEvents AfterCompleted
// RxSwift HandleEvents OnSubscribed
// RxSwift HandleEvents OnDispose
ReactiveSwift
on
์คํผ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํ ์ ์๋ค.
SignalProducer(value: Void())
.on(starting: { print("ReactiveSwift HandleEvents Starting") },
started: { print("ReactiveSwift HandleEvents Started") },
event: { _ in print("ReactiveSwift HandleEvents Event") },
failed: { _ in print("ReactiveSwift HandleEvents Failed") },
completed: { print("ReactiveSwift HandleEvents Completed") },
interrupted: { print("ReactiveSwift HandleEvents Interrupted") },
terminated: { print("ReactiveSwift HandleEvents Terminated") },
disposed: { print("ReactiveSwift HandleEvents Dispose") },
value: { print("ReactiveSwift HandleEvents Value") })
.start { event in
switch event {
case .value:
print("ReactiveSwift HandleEvents")
case .failed:
print("ReactiveSwift HandleEvents Error")
case .completed:
print("ReactiveSwift HandleEvents Finish")
default:
break
}
}
// ReactiveSwift HandleEvents Starting
// ReactiveSwift HandleEvents Event
// ReactiveSwift HandleEvents Value
// ReactiveSwift HandleEvents
// ReactiveSwift HandleEvents Event
// ReactiveSwift HandleEvents Completed
// ReactiveSwift HandleEvents Terminated
// ReactiveSwift HandleEvents Finish
// ReactiveSwift HandleEvents Dispose
// ReactiveSwift HandleEvents Started
์ฐธ๊ณ
ReactiveX - Operators - Do