이니셜라이저는 세 개의 인자를 받는다.
// 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)
1초마다 버퍼에 기억한 요소를 배열의 형태로 만들어 값을 발행하거나, 시간이 지나기 전에 버퍼에 기억할 수 있는 최대의 요소인 두 개의 요소가 저장되면 요소를 배열의 형태로 만들어 값을 발행한다.
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)
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
}
}