์ ๋ค๋ฆญ ๊ตฌ์กฐ์ฒด | ๋ ๊ฐ์ ์์ Publisher์ ๊ฒฐํฉ ํจ์๋ฅผ ์ ์ฉํ์ฌ ์์ฑ๋๋ Publisher
์ด๋์
๋ผ์ด์ ๋ ์กฐํฉํ ๋ ๊ฐ์ Publisher๋ฅผ ๋ฐ๋๋ค.
์ธ์์ ๋ค์ด๊ฐ๋ ๋ชจ๋ Publisher์ Output ํ์
๊ณผ ์๋ฌ ํ์
์ ๊ฐ์์ผ ํ๋ค.
๋ ๊ฐ์ ์คํธ๋ฆผ์ ํ๋๋ก ํฉ์ณ ํ๋์ ์คํธ๋ฆผ์ ๋ค๋ฃจ๋ ๊ฒ์ฒ๋ผ ํ๊ธฐ ์ํด ์ฌ์ฉํ ์ ์๋ค.
merge
์คํผ๋ ์ดํฐ์ ๊ด๋ จ์ด ์๋ค.
let aSubject = PassthroughSubject<Int, Never>()
let bSubject = PassthroughSubject<Int, Never>()
// Publishers.Merge Publisher
Publishers
.Merge(aSubject, bSubject)
.sink(receiveCompletion: { completion in
switch completion {
case .failure:
print("Combine Merge Error")
case .finished:
print("Combine Merge Finish")
}
}, receiveValue: { value in
print("Combine Merge : \(value)")
})
.store(in: &cancellables)
// merge Operator
aSubject
.merge(with: bSubject)
.sink(receiveCompletion: { completion in
switch completion {
case .failure:
print("Combine Merge Error")
case .finished:
print("Combine Merge Finish")
}
}, receiveValue: { value in
print("Combine Merge : \(value)")
})
.store(in: &cancellables)
// 1
aSubject.send(1)
// 2
aSubject.send(2)
// 3
bSubject.send(3)
// 4
bSubject.send(4)
// Combine Merge : 1
// Combine Merge : 2
// Combine Merge : 3
// Combine Merge : 4
์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ด ๋์ํ๋ค.
1์ ์ฝ๋๋ฅผ ์คํํ์ฌ aSubject
์ 1์ ๊ฐ์ ์ ๋ฌํ๋ค. ํด๋น Publisher๋ 1์ ๊ฐ์ ๋ธ๋ค.
2์ ์ฝ๋๋ฅผ ์คํํ์ฌ aSubject
์ 2์ ๊ฐ์ ์ ๋ฌํ๋ค. ํด๋น Publisher๋ 2์ ๊ฐ์ ๋ธ๋ค.
3์ ์ฝ๋๋ฅผ ์คํํ์ฌ bSubject
์ 3์ ๊ฐ์ ์ ๋ฌํ๋ค. ํด๋น Publisher๋ 3์ ๊ฐ์ ๋ธ๋ค.
4์ ์ฝ๋๋ฅผ ์คํํ์ฌ bSubject
์ 4์ ๊ฐ์ ์ ๋ฌํ๋ค. ํด๋น Publisher๋ 4์ ๊ฐ์ ๋ธ๋ค.
RxSwift
merge
์คํผ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํ ์ ์๋ค.
let aSubject = PublishSubject<Int>()
let bSubject = PublishSubject<Int>()
Observable.merge(aSubject, bSubject)
.subscribe(onNext: { value in
print("RxSwift Merge : \(value)")
}, onError: { _ in
print("RxSwift Merge Error")
}, onCompleted: {
print("RxSwift Merge Finish")
})
.disposed(by: disposeBag)
aSubject.onNext(1)
aSubject.onNext(2)
bSubject.onNext(3)
bSubject.onNext(4)
// RxSwift Merge : 1
// RxSwift Merge : 2
// RxSwift Merge : 3
// RxSwift Merge : 4
ReactiveSwift
merge
์คํผ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํ ์ ์๋ค.
let aProperty = MutableProperty<Int>(0)
let bProperty = MutableProperty<Int>(0)
aProperty.signal
.merge(with: bProperty.signal)
.observe { event in
switch event {
case let .value(value):
print("ReactiveSwift Merge : \(value)")
case .failed:
print("ReactiveSwift Merge Error")
case .completed:
print("ReactiveSwift Merge Finish")
default:
break
}
}
aProperty.value = 1
aProperty.value = 2
bProperty.value = 3
bProperty.value = 4
// ReactiveSwift Merge : 1
// ReactiveSwift Merge : 2
// ReactiveSwift Merge : 3
// ReactiveSwift Merge : 4
// ReactiveSwift Merge Finish
์ฐธ๊ณ
ReactiveX - Operators - Merge