Publishers.CombineLatest
μ λ€λ¦ ꡬ쑰체 | λ κ°μ Publisherλ‘λΆν° μ΅μ μ μμλ₯Ό μ λ¬λ°κ³ μ‘°ν©νλ Publisher
μ΄λμ λΌμ΄μ λ μ‘°ν©ν λ κ°μ Publisherλ₯Ό λ°λλ€.
μ‘°ν©ν λͺ¨λ Publisherμ μλ¬ νμ μ κ°μμΌ νλ€.
λ κ°μ Publisherμμ μ΅μ μ μμλ₯Ό λ°ννμ λ μ΄λ€μ μ‘°ν©νλ λμμ μν λ μ¬μ©ν μ μλ€.
μλ₯Ό λ€μ΄ λ κ°μ μ λ ₯ νΌμ΄ μκ³ λͺ¨λ κ°μ΄ μ λ ₯λμ΄μΌ λ²νΌμ νμ±νν΄μΌ νλ€λ μꡬμ¬νμ΄ μμ λ μ΄ λμμ μ¬μ©ν μ μλ€. λ κ°μ μ λ ₯μ λν Publisherμμ λͺ¨λ κ°μ λ°νν΄μΌ νκΈ° λλ¬Έμ΄λ€.
comnbineLatest
μ€νΌλ μ΄ν°μ κ΄λ ¨μ΄ μλ€.
let aSubject = PassthroughSubject<Int, Never>()
let bSubject = PassthroughSubject<Int, Never>()
// Publishers.CombineLatest Publisher
Publishers
.CombineLatest(aSubject, bSubject)
.sink(receiveCompletion: { completion in
switch completion {
case .failure:
print("Combine CombineLatest Error")
case .finished:
print("Combine CombineLatest Finish")
}
}, receiveValue: { value in
print("Combine CombineLatest : \(value)")
})
.store(in: &cancellables)
// Combine CombineLatest : (2, 3)
// Combine CombineLatest : (2, 4)
// Combine CombineLatest Finish
// combineLatest Operator
aSubject
.combineLatest(bSubject)
.sink(receiveCompletion: { completion in
switch completion {
case .failure:
print("Combine CombineLatest Error")
case .finished:
print("Combine CombineLatest Finish")
}
}, receiveValue: { value in
print("Combine CombineLatest : \(value)")
})
.store(in: &cancellables)
// Combine CombineLatest : (2, 3)
// Combine CombineLatest : (2, 4)
// Combine CombineLatest Finish
aSubject
.combineLatest(bSubject) { $0 * $1 }
.sink(receiveCompletion: { completion in
switch completion {
case .failure:
print("Combine CombineLatest Error")
case .finished:
print("Combine CombineLatest Finish")
}
}, receiveValue: { value in
print("Combine CombineLatest : \(value)")
})
.store(in: &cancellables)
// Combine CombineLatest : 6
// Combine CombineLatest : 8
// Combine CombineLatest Finish
// 1
aSubject.send(1)
// 2
aSubject.send(2)
// 3
bSubject.send(3)
// 4
bSubject.send(4)
λ κ°μ Subjectλ‘λΆν° μ΅μ μ μμλ₯Ό μ λ¬λ°κ³ μ‘°ν©νλλ‘ νμλ€.
λ³ν ν΄λ‘μ λ₯Ό μ μ©νμ§ μμ μ½λλ λ€μκ³Ό κ°μ΄ λμνλ€.
1μ μ€νμ μν΄
aSubject
μ 1μ κ°μ μ λ¬νλ€.bSubject
μ κ°μ΄ μ λ¬λ μ μ΄ μμΌλ―λ‘ ν΄λΉ Publisherλ κ°μ λ΄μ§ μλλ€.2μ μ€νμ μν΄
aSubject
μ 2μ κ°μ μ λ¬νλ€.bSubject
μ κ°μ΄ μ λ¬λ μ μ΄ μμΌλ―λ‘ ν΄λΉ Publisherλ κ°μ λ΄μ§ μλλ€.3μ μ€νμ μν΄
bSubject
μ 3μ κ°μ μ λ¬νλ€.aSubject
μ κ°μ΄ μ λ¬λ μ μ΄ μμΌλ―λ‘ ν΄λΉ PublisherλaSubject
μ μ΅μ κ°μΈ 2μbSubject
μ μ΅μ κ°μΈ 3μ ννμ ννλ‘ μ‘°ν©νμ¬ (2, 3)μ κ°μ λΈλ€.4μ μ€νμ μν΄
bSubject
μ 4μ κ°μ μ λ¬νλ€.aSubject
μ κ°μ΄ μ λ¬λ μ μ΄ μμΌλ―λ‘ ν΄λΉ PublisherλaSubject
μ μ΅μ κ°μΈ 2μbSubject
μ μ΅μ κ°μΈ 4λ₯Ό ννμ ννλ‘ μ‘°ν©νμ¬ (2, 4)μ κ°μ λΈλ€.
λ³ν ν΄λ‘μ λ₯Ό μ μ©ν μ½λλ λ€μκ³Ό κ°μ΄ λμνλ€.
1μ μ€νμ μν΄
aSubject
μ 1μ κ°μ μ λ¬νλ€.bSubject
μ κ°μ΄ μ λ¬λ μ μ΄ μμΌλ―λ‘ ν΄λΉ Publisherλ κ°μ λ΄μ§ μλλ€.2μ μ€νμ μν΄
aSubject
μ 2μ κ°μ μ λ¬νλ€.bSubject
μ κ°μ΄ μ λ¬λ μ μ΄ μμΌλ―λ‘ ν΄λΉ Publisherλ κ°μ λ΄μ§ μλλ€.3μ μ€νμ μν΄
bSunject
μ 3μ κ°μ μ λ¬νλ€.aSubject
μ κ°μ΄ μ λ¬λ μ μ΄ μμΌλ―λ‘ ν΄λΉ PublisherλaSubject
μ μ΅μ κ°μΈ 2μbSubject
μ μ΅μ κ°μΈ 3μ κ³±νμ¬ 6μ κ°μ λΈλ€.4μ μ€νμ μν΄
bSunject
μ 4μ κ°μ μ λ¬νλ€.aSubject
μ κ°μ΄ μ λ¬λ μ μ΄ μμΌλ―λ‘ ν΄λΉ PublisherλaSubject
μ μ΅μ κ°μΈ 2μbSubject
μ μ΅μ κ°μΈ 4λ₯Ό κ³±νμ¬ 8μ κ°μ λΈλ€.
RxSwift
combineLatest
μ€νΌλ μ΄ν°λ₯Ό μ¬μ©νμ¬ κ΅¬νν μ μλ€.
let aSubject = PublishSubject<Int>()
let bSubject = PublishSubject<Int>()
Observable.combineLatest(aSubject, bSubject)
.subscribe(onNext: { value in
print("RxSwift CombineLatest : \(value)")
}, onError: { _ in
print("RxSwift CombineLatest Error")
}, onCompleted: {
print("RxSwift CombineLatest Finish")
})
.disposed(by: disposeBag)
aSubject.onNext(1)
aSubject.onNext(2)
bSubject.onNext(3)
bSubject.onNext(4)
// RxSwift CombineLatest : (2, 3)
// RxSwift CombineLatest : (2, 4)
ReactiveSwift
combineLatest
μ€νΌλ μ΄ν°λ₯Ό μ¬μ©νμ¬ κ΅¬νν μ μλ€.
let aProperty = MutableProperty<Int>(0)
let bProperty = MutableProperty<Int>(0)
aProperty.signal
.combineLatest(with: bProperty.signal)
.observe { event in
switch event {
case let .value(value):
print("ReactiveSwift CombineLatest : \(value)")
case .failed:
print("ReactiveSwift CombineLatest Error")
case .completed:
print("ReactiveSwift CombineLatest Finish")
default:
break
}
}
aProperty.value = 1
aProperty.value = 2
bProperty.value = 3
bProperty.value = 4
// ReactiveSwift CombineLatest : (2, 3)
// ReactiveSwift CombineLatest : (2, 4)
// ReactiveSwift CombineLatest Finish
μ°Έκ³
Last updated
Was this helpful?