@@ -20,6 +20,8 @@ public extension Publishers {
2020 private let count : Int
2121 /// The current offset.
2222 private let offset : Offset
23+ /// The delay between calls.
24+ private let delay : TimeInterval
2325 /// The iteration generator.
2426 private let generator : ( _ offset: Offset ) -> Iteration
2527
@@ -28,12 +30,15 @@ public extension Publishers {
2830 /// - parameters:
2931 /// - count: A valid `Int`. Defaults to `.max`.
3032 /// - offset: A valid `Offset`.
33+ /// - delay: A valid `TimeInterval`.
3134 /// - generator: A valid generator.
3235 public init ( _ count: Int = . max,
3336 offset: Offset ,
37+ delay: TimeInterval ,
3438 generator: @escaping ( _ offset: Offset ) -> Iteration ) {
3539 self . count = count
3640 self . offset = offset
41+ self . delay = delay
3742 self . generator = generator
3843 }
3944
@@ -44,7 +49,7 @@ public extension Publishers {
4449 /// - generator: A valid generator.
4550 public init ( _ pages: PagerProviderInput < Offset > ,
4651 generator: @escaping ( _ offset: Offset ) -> Iteration ) {
47- self . init ( pages. count, offset: pages. offset, generator: generator)
52+ self . init ( pages. count, offset: pages. offset, delay : pages . delay , generator: generator)
4853 }
4954
5055 /// Receive a subscriber.
@@ -73,7 +78,8 @@ public extension Publishers {
7378 return current. eraseToAnyPublisher ( )
7479 case . load( let next) :
7580 return current
76- . append ( Pager ( count - 1 , offset: next, generator: generator) )
81+ . append ( Deferred { Pager ( count - 1 , offset: next, delay: delay, generator: generator) }
82+ . delay ( for: . seconds( count - 1 > 0 ? delay : 0 ) , scheduler: RunLoop . main) )
7783 . eraseToAnyPublisher ( )
7884 }
7985 }
@@ -94,9 +100,10 @@ public extension Pager where Offset == Void {
94100 ///
95101 /// - parameters:
96102 /// - count: A valid `Int`. Defaults to `.max`.
103+ /// - delay: A valid `TimeInterval`. Defaults to `0`.
97104 /// - generator: A valid generator.
98- init ( _ count: Int = . max, generator: @escaping ( ) -> Iteration ) {
99- self . init ( count, offset: ( ) ) { _ in generator ( ) }
105+ init ( _ count: Int = . max, delay : TimeInterval = 0 , generator: @escaping ( ) -> Iteration ) {
106+ self . init ( count, offset: ( ) , delay : delay ) { _ in generator ( ) }
100107 }
101108
102109 /// Init.
@@ -112,9 +119,10 @@ public extension Pager where Offset == Void {
112119 ///
113120 /// - parameters:
114121 /// - count: A valid `Int`. Defaults to `.max`.
122+ /// - delay: A valid `TimeInterval`. Defaults to `0`.
115123 /// - generator: A valid generator.
116- init ( _ count: Int = . max, generator: @escaping ( ) -> Stream ) {
117- self . init ( count, offset: ( ) ) { _ in generator ( ) . iterate ( ) }
124+ init ( _ count: Int = . max, delay : TimeInterval = 0 , generator: @escaping ( ) -> Stream ) {
125+ self . init ( count, offset: ( ) , delay : delay ) { _ in generator ( ) . iterate ( ) }
118126 }
119127
120128 /// Init.
@@ -132,9 +140,10 @@ public extension Pager where Offset: ComposableOptionalType {
132140 ///
133141 /// - parameters:
134142 /// - count: A valid `Int`. Defaults to `.max`.
143+ /// - delay: A valid `TimeInterval`. Defaults to `0`.
135144 /// - generator: A valid generator.
136- init ( _ count: Int = . max, generator: @escaping ( _ offset: Offset ) -> Iteration ) {
137- self . init ( count, offset: . composableNone, generator: generator)
145+ init ( _ count: Int = . max, delay : TimeInterval = 0 , generator: @escaping ( _ offset: Offset ) -> Iteration ) {
146+ self . init ( count, offset: . composableNone, delay : delay , generator: generator)
138147 }
139148}
140149
@@ -144,11 +153,13 @@ public extension Pager where Offset: Ranked {
144153 /// - parameters:
145154 /// - count: A valid `Int`. Defaults to `.max`.
146155 /// - offset: A valid `Offset`.
156+ /// - delay: A valid `TimeInterval`. Defaults to `0`.
147157 /// - generator: A valid generator.
148158 init ( _ count: Int = . max,
149159 offset: Offset ,
160+ delay: TimeInterval = 0 ,
150161 generator: @escaping ( _ offset: Offset . Offset ) -> Pager < Offset . Offset , Stream > . Iteration ) {
151- self . init ( count, offset: offset) { offset -> Iteration in
162+ self . init ( count, offset: offset, delay : delay ) { offset -> Iteration in
152163 let iteration = generator ( offset. offset)
153164 return . init( stream: iteration. stream) {
154165 switch iteration. offset ( $0) {
@@ -168,6 +179,6 @@ public extension Pager where Offset: Ranked {
168179 /// - generator: A valid generator.
169180 init ( _ pages: PagerProviderInput < Offset > ,
170181 generator: @escaping ( _ offset: Offset . Offset ) -> Pager < Offset . Offset , Stream > . Iteration ) {
171- self . init ( pages. count, offset: pages. offset, generator: generator)
182+ self . init ( pages. count, offset: pages. offset, delay : pages . delay , generator: generator)
172183 }
173184}
0 commit comments