Skip to content

Commit c97f6e1

Browse files
committed
Added withPrevious
1 parent 7dda47a commit c97f6e1

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

Receiver/Sources/Receiver+Operators.swift

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,23 @@ extension Receiver {
1919

2020
return receiver
2121
}
22+
23+
func withPrevious() -> Receiver<(Wave?, Wave)> {
24+
let (transmitter, receiver) = Receiver<(Wave?, Wave)>.make()
25+
let values = Atomic<[Wave]>([])
26+
27+
self.listen { newValue in
28+
values.apply { _values in
29+
30+
let previous = _values.last
31+
_values.append(newValue)
32+
33+
transmitter.broadcast((previous, newValue))
34+
}
35+
}
36+
37+
return receiver
38+
}
2239
}
2340

2441
extension Receiver where Wave: Equatable {

ReceiverTests/ReceiverTests+Operators.swift

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,26 @@ class ReceiverTests_Operators: XCTestCase {
5353

5454
XCTAssertTrue(called == 5)
5555
}
56+
57+
func test_withPrevious_nil() {
58+
let (transmitter, receiver) = Receiver<Int>.make()
59+
let newReceiver = receiver.withPrevious()
60+
var called = 0
61+
var expected: (Int?, Int) = (0, 0)
62+
63+
newReceiver.listen { wave in
64+
expected = wave
65+
called = called + 1
66+
}
67+
68+
transmitter.broadcast(1)
69+
XCTAssertTrue(expected.0 == nil)
70+
XCTAssertTrue(expected.1 == 1)
71+
72+
transmitter.broadcast(2)
73+
XCTAssertTrue(expected.0 == 1)
74+
XCTAssertTrue(expected.1 == 2)
75+
76+
XCTAssertTrue(called == 2)
77+
}
5678
}

0 commit comments

Comments
 (0)