Publishers.Merge
์ ๋ค๋ฆญ ๊ตฌ์กฐ์ฒด | ๋ ๊ฐ์ ์์ 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 ์คํผ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํ ์ ์๋ค.
ReactiveSwift
merge ์คํผ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํ ์ ์๋ค.
์ฐธ๊ณ
Last updated
Was this helpful?