Skip to content

Commit 054c46e

Browse files
committed
Convert to ReactiveSwift
1 parent 382a53d commit 054c46e

File tree

2 files changed

+23
-31
lines changed

2 files changed

+23
-31
lines changed
Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import Combine
1+
import Foundation
2+
import ReactiveSwift
23

34
extension Effect {
45
/// Returns an effect that will be executed after given `dueTime`.
@@ -16,15 +17,12 @@ extension Effect {
1617
/// - scheduler: The scheduler you want to deliver the defer output to.
1718
/// - options: Scheduler options that customize the effect's delivery of elements.
1819
/// - Returns: An effect that will be executed after `dueTime`
19-
public func deferred<S: Scheduler>(
20-
for dueTime: S.SchedulerTimeType.Stride,
21-
scheduler: S,
22-
options: S.SchedulerOptions? = nil
23-
) -> Effect {
24-
Just(())
25-
.setFailureType(to: Failure.self)
26-
.delay(for: dueTime, scheduler: scheduler, options: options)
27-
.flatMap { self }
28-
.eraseToEffect()
20+
public func deferred(
21+
for dueTime: TimeInterval,
22+
scheduler: DateScheduler
23+
) -> Effect<Value, Error> {
24+
SignalProducer<Void, Never>(value: ())
25+
.delay(dueTime, on: scheduler)
26+
.flatMap(.latest) { self }
2927
}
3028
}

Tests/ComposableArchitectureTests/EffectDeferredTests.swift

Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,16 @@
1-
import Combine
21
import ComposableArchitecture
2+
import ReactiveSwift
33
import XCTest
44

55
final class EffectDeferredTests: XCTestCase {
6-
var cancellables: Set<AnyCancellable> = []
7-
86
func testDeferred() {
9-
let scheduler = DispatchQueue.test
7+
let scheduler = TestScheduler()
108
var values: [Int] = []
119

1210
func runDeferredEffect(value: Int) {
13-
Just(value)
14-
.eraseToEffect()
11+
SignalProducer(value: value)
1512
.deferred(for: 1, scheduler: scheduler)
16-
.sink { values.append($0) }
17-
.store(in: &self.cancellables)
13+
.startWithValues { values.append($0) }
1814
}
1915

2016
runDeferredEffect(value: 1)
@@ -23,25 +19,25 @@ final class EffectDeferredTests: XCTestCase {
2319
XCTAssertEqual(values, [])
2420

2521
// Waiting half the time also emits nothing
26-
scheduler.advance(by: 0.5)
22+
scheduler.advance(by: .milliseconds(500))
2723
XCTAssertEqual(values, [])
2824

2925
// Run another deferred effect.
3026
runDeferredEffect(value: 2)
3127

3228
// Waiting half the time emits first deferred effect received.
33-
scheduler.advance(by: 0.5)
29+
scheduler.advance(by: .milliseconds(500))
3430
XCTAssertEqual(values, [1])
3531

3632
// Run another deferred effect.
3733
runDeferredEffect(value: 3)
3834

3935
// Waiting half the time emits second deferred effect received.
40-
scheduler.advance(by: 0.5)
36+
scheduler.advance(by: .milliseconds(500))
4137
XCTAssertEqual(values, [1, 2])
4238

4339
// Waiting the rest of the time emits the final effect value.
44-
scheduler.advance(by: 0.5)
40+
scheduler.advance(by: .milliseconds(500))
4541
XCTAssertEqual(values, [1, 2, 3])
4642

4743
// Running out the scheduler
@@ -50,32 +46,30 @@ final class EffectDeferredTests: XCTestCase {
5046
}
5147

5248
func testDeferredIsLazy() {
53-
let scheduler = DispatchQueue.test
49+
let scheduler = TestScheduler()
5450
var values: [Int] = []
5551
var effectRuns = 0
5652

5753
func runDeferredEffect(value: Int) {
58-
Deferred { () -> Just<Int> in
54+
Effect.deferred { () -> Effect<Int, Never> in
5955
effectRuns += 1
60-
return Just(value)
56+
return Effect(value: value)
6157
}
62-
.eraseToEffect()
6358
.deferred(for: 1, scheduler: scheduler)
64-
.sink { values.append($0) }
65-
.store(in: &self.cancellables)
59+
.startWithValues { values.append($0) }
6660
}
6761

6862
runDeferredEffect(value: 1)
6963

7064
XCTAssertEqual(values, [])
7165
XCTAssertEqual(effectRuns, 0)
7266

73-
scheduler.advance(by: 0.5)
67+
scheduler.advance(by: .milliseconds(500))
7468

7569
XCTAssertEqual(values, [])
7670
XCTAssertEqual(effectRuns, 0)
7771

78-
scheduler.advance(by: 0.5)
72+
scheduler.advance(by: .milliseconds(500))
7973

8074
XCTAssertEqual(values, [1])
8175
XCTAssertEqual(effectRuns, 1)

0 commit comments

Comments
 (0)