제네릭 구조체 | 나중에 요소가 다시 발행되기 이전에 명시한 개수의 요소를 생략하는 Publisher
이니셜라이저는 두 개의 인자를 받는다.
upstream : 상위에 흐르는 Publisher
count : 생략할 요소의 개수
조건 없이 앞에서 몇 개의 요소를 생략하고 싶을 때 사용 가능하다.
초기값을 갖는 CurrentValueSubject를 사용하는 경우, 초기값을 무시하기 위해 사용할 수 있다.
dropFirst 오퍼레이터와 관련이 있다.
// Publishers.Drop PublisherPublishers .Drop(upstream: Publishers.Sequence<[Int], Never>(sequence: [1, 2, 3]), count:2) .sink(receiveCompletion: { completion inswitch completion {case .failure: print("Combine Drop Error")case .finished: print("Combine Drop Finish") } }, receiveValue: { value in print("Combine Drop : \(value)") }) .store(in:&cancellables)// dropFirst OperatorPublishers.Sequence<[Int], Never>(sequence: [1, 2, 3]) .dropFirst(2) .sink(receiveCompletion: { completion inswitch completion {case .failure: print("Combine Drop Error")case .finished: print("Combine Drop Finish") } }, receiveValue: { value in print("Combine Drop : \(value)") }) .store(in:&cancellables)// Combine Drop : 3// Combine Drop Finish
상위 Publisher는 1, 2, 3의 값을 차례대로 낸다.
2개의 요소를 생략하게 하였으므로 최종적으로 3의 값을 내고 종료한다.
RxSwift
skip 오퍼레이터를 사용하여 구현할 수 있다.
Observable.from([1, 2, 3]) .skip(2) .subscribe(onNext: { value in print("RxSwift Drop : \(value)") }, onError: { _in print("RxSwift Drop Error") }, onCompleted: { print("RxSwift Drop Finish") }) .disposed(by: disposeBag)// RxSwift Drop : 3// RxSwift Drop Finish
ReactiveSwift
skip 오퍼레이터를 사용하여 구현할 수 있다.
SignalProducer([1, 2, 3]) .skip(first:2) .start { event inswitch event {caselet .value(value):print("ReactiveSwift Drop : \(value)")case .failed:print("ReactiveSwift Drop Error")case .completed:print("ReactiveSwift Drop Finish")default:break } }// ReactiveSwift Drop : 3// ReactiveSwift Drop Finish