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