μ λ€λ¦ ꡬ쑰체 | μμ΄ν
μ μΌμμ μΌλ‘ κΈ°μ΅νκ³ μ£ΌκΈ°μ μΌλ‘ λ°ννλ Publisher
μ΄λμ
λΌμ΄μ λ μΈ κ°μ μΈμλ₯Ό λ°λλ€.
upstream
: μμμ νλ₯΄λ Publisher
strategy
: μμλ₯Ό λͺ¨μΌκ³ λ°ννλ μ λ΅
options
: μ λ΅μ μ¬μ©λλ μ€μΌμ€λ¬ μ΅μ
strategy
μΈμλ Publishers.TimeGroupingStrategy
νμ
μ μΈμ€ν΄μ€λ₯Ό λ°μΌλ©°, λ€μμ μΌμ΄μ€λ‘ ꡬμ±λμ΄ μλ€.
byTime
: νΉμ μκ° λμ μμλ₯Ό λͺ¨μΌκ³ λ°νν¨
byTimeOrCount
: νΉμ μκ° λμ μμλ₯Ό λͺ¨μΌκ³ λ°ννκ±°λ, λ²νΌκ° μ΅λ ν¬κΈ°μ λλ¬νλ©΄ λ°νν¨
collect
μ€νΌλ μ΄ν°μ κ΄λ ¨μ΄ μλ€.
// Publishers.CollectByTime Publisher
let subject = PassthroughSubject<Int, Never>()
Publishers.CollectByTime(upstream: subject, strategy: .byTimeOrCount(DispatchQueue.main, 1, 2), options: nil)
.sink(receiveCompletion: { completion in
switch completion {
case .failure:
print("Combine CollectByTime Error")
case .finished:
print("Combine CollectByTime Finish")
}
}, receiveValue: { value in
print("Combine CollectByTime : \(value)")
})
.store(in: &cancellables)
// collect Operator
subject
.collect(.byTimeOrCount(DispatchQueue.main, 1, 2))
.sink(receiveCompletion: { completion in
switch completion {
case .failure:
print("Combine CollectByTime Error")
case .finished:
print("Combine CollectByTime Finish")
}
}, receiveValue: { value in
print("Combine CollectByTime : \(value)")
})
.store(in: &cancellables)
λ μ½λ λͺ¨λ .byTimeOrCount
μ λ΅μ μ€μ νμΌλ©°, λ©μΈ μ°λ λμμ λμνκ² λλ€.
1μ΄λ§λ€ λ²νΌμ κΈ°μ΅ν μμλ₯Ό λ°°μ΄μ ννλ‘ λ§λ€μ΄ κ°μ λ°ννκ±°λ, μκ°μ΄ μ§λκΈ° μ μ λ²νΌμ κΈ°μ΅ν μ μλ μ΅λμ μμμΈ λ κ°μ μμκ° μ μ₯λλ©΄ μμλ₯Ό λ°°μ΄μ ννλ‘ λ§λ€μ΄ κ°μ λ°ννλ€.
RxSwift
buffer
μ€νΌλ μ΄ν°λ₯Ό μ¬μ©νμ¬ κ΅¬νν μ μλ€.
let subject = PublishSubject<Int>()
subject
.buffer(timeSpan: .seconds(1), count: 2, scheduler: MainScheduler.instance)
.subscribe(onNext: { value in
print("RxSwift CollectByTime : \(value)")
}, onError: { _ in
print("RxSwift CollectByTime Error")
}, onCompleted: {
print("RxSwift CollectByTime Finish")
})
.disposed(by: disposeBag)
ReactiveSwift
collect
μ€νΌλ μ΄ν°λ₯Ό μ¬μ©νμ¬ κ΅¬νν μ μλ€.
let property = MutableProperty<Int>(0)
property.signal
.collect(every: .seconds(1), on: QueueScheduler.main)
.observe { event in
switch event {
case let .value(value):
print("ReactiveSwift CollectByTime : \(value)")
case .failed:
print("ReactiveSwift CollectByTime Error")
case .completed:
print("ReactiveSwift CollectByTime Finish")
default:
break
}
}