Skip to content

Commit e36900b

Browse files
authored
Merge pull request #515 from ReactiveCocoa/observer-fix
Replace `Observer.action` with `Observer.send`.
2 parents f5cd224 + 991ff80 commit e36900b

File tree

8 files changed

+44
-30
lines changed

8 files changed

+44
-30
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# master
22
*Please add new entries at the top.*
33

4+
1. `Signal.Observer.action` has been deprecated. Use `Signal.Observer.send` instead. (#515)
5+
46
1. Workaround an unexpected EGAGIN error being returned by pthread in 32-bit ARM debug builds. (#508)
57

68
1. The `SignalProducer` internals have undergone a significant refactoring, which bootstraps the effort to reduce the overhead of constant producers and producer compositions. (#487, kudos to @andersio)

Sources/Action.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ public final class Action<Input, Output, Error: Swift.Error> {
161161
}
162162

163163
let interruptHandle = execute(state, input).start { event in
164-
observer.action(event.mapError(ActionError.producerFailed))
164+
observer.send(event.mapError(ActionError.producerFailed))
165165
action.eventsObserver.send(value: event)
166166
}
167167

Sources/Flatten.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,7 @@ extension Signal where Value: SignalProducerConvertible, Error == Value.Error {
329329
}
330330

331331
case .value, .failed:
332-
observer.action(event)
332+
observer.send(event)
333333
}
334334
}
335335
}
@@ -592,7 +592,7 @@ extension Signal where Value: SignalProducerConvertible, Error == Value.Error {
592592
}
593593

594594
case .value, .failed:
595-
observer.action(event)
595+
observer.send(event)
596596
}
597597
}
598598
}
@@ -720,7 +720,7 @@ extension Signal where Value: SignalProducerConvertible, Error == Value.Error {
720720
}
721721

722722
case .value, .failed, .interrupted:
723-
observer.action(event)
723+
observer.send(event)
724724
}
725725
}
726726
}

Sources/Observer.swift

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,16 @@ extension Signal {
1111
/// (typically from a Signal).
1212
public final class Observer {
1313
public typealias Action = (Event) -> Void
14+
private let _send: Action
1415

1516
/// An action that will be performed upon arrival of the event.
16-
public let action: Action
17+
@available(*, deprecated: 2.0, renamed:"send(_:)")
18+
public var action: Action {
19+
guard !interruptsOnDeinit && wrapped == nil else {
20+
return { self._send($0) }
21+
}
22+
return _send
23+
}
1724

1825
/// Whether the observer should send an `interrupted` event as it deinitializes.
1926
private let interruptsOnDeinit: Bool
@@ -40,9 +47,9 @@ extension Signal {
4047
) {
4148
var hasDeliveredTerminalEvent = false
4249

43-
self.action = transform { event in
50+
self._send = transform { event in
4451
if !hasDeliveredTerminalEvent {
45-
observer.action(event)
52+
observer._send(event)
4653

4754
if event.isTerminating {
4855
hasDeliveredTerminalEvent = true
@@ -63,7 +70,7 @@ extension Signal {
6370
/// - interruptsOnDeinit: `true` if the observer should send an `interrupted`
6471
/// event as it deinitializes. `false` otherwise.
6572
internal init(action: @escaping Action, interruptsOnDeinit: Bool) {
66-
self.action = action
73+
self._send = action
6774
self.wrapped = nil
6875
self.interruptsOnDeinit = interruptsOnDeinit
6976
}
@@ -74,7 +81,7 @@ extension Signal {
7481
/// - parameters:
7582
/// - action: A closure to lift over received event.
7683
public init(_ action: @escaping Action) {
77-
self.action = action
84+
self._send = action
7885
self.wrapped = nil
7986
self.interruptsOnDeinit = false
8087
}
@@ -116,7 +123,7 @@ extension Signal {
116123
self.init { event in
117124
switch event {
118125
case .value, .completed, .failed:
119-
observer.action(event)
126+
observer.send(event)
120127
case .interrupted:
121128
observer.sendCompleted()
122129
}
@@ -128,34 +135,39 @@ extension Signal {
128135
// Since `Signal` would ensure that only one terminal event would ever be
129136
// sent for any given `Signal`, we do not need to assert any condition
130137
// here.
131-
action(.interrupted)
138+
_send(.interrupted)
132139
}
133140
}
134141

142+
/// Puts an event into `self`.
143+
public func send(_ event: Event) {
144+
_send(event)
145+
}
146+
135147
/// Puts a `value` event into `self`.
136148
///
137149
/// - parameters:
138150
/// - value: A value sent with the `value` event.
139151
public func send(value: Value) {
140-
action(.value(value))
152+
_send(.value(value))
141153
}
142154

143155
/// Puts a failed event into `self`.
144156
///
145157
/// - parameters:
146158
/// - error: An error object sent with failed event.
147159
public func send(error: Error) {
148-
action(.failed(error))
160+
_send(.failed(error))
149161
}
150162

151163
/// Puts a `completed` event into `self`.
152164
public func sendCompleted() {
153-
action(.completed)
165+
_send(.completed)
154166
}
155167

156168
/// Puts an `interrupted` event into `self`.
157169
public func sendInterrupted() {
158-
action(.interrupted)
170+
_send(.interrupted)
159171
}
160172
}
161173
}

Sources/Property.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -553,7 +553,7 @@ public final class Property<Value>: PropertyProtocol {
553553
guard let box = box else {
554554
// Just forward the event, since no one owns the box or IOW no demand
555555
// for a cached latest value.
556-
return observer.action(event)
556+
return observer.send(event)
557557
}
558558

559559
box.begin { storage in
@@ -562,7 +562,7 @@ public final class Property<Value>: PropertyProtocol {
562562
value = newValue
563563
}
564564
}
565-
observer.action(event)
565+
observer.send(event)
566566
}
567567
}
568568
}

Sources/Signal.swift

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ public final class Signal<Value, Error: Swift.Error> {
112112
self.stateLock.unlock()
113113

114114
for observer in observers {
115-
observer.action(event)
115+
observer.send(event)
116116
}
117117
} else {
118118
self.stateLock.unlock()
@@ -219,7 +219,7 @@ public final class Signal<Value, Error: Swift.Error> {
219219

220220
if let event = terminationKind.materialize() {
221221
for observer in observers {
222-
observer.action(event)
222+
observer.send(event)
223223
}
224224
}
225225

@@ -902,7 +902,7 @@ extension Signal {
902902
terminated?()
903903
}
904904

905-
observer.action(receivedEvent)
905+
observer.send(receivedEvent)
906906
}
907907

908908
return disposable
@@ -1312,14 +1312,14 @@ extension Signal {
13121312
break
13131313

13141314
case .value, .failed, .interrupted:
1315-
observer.action(event)
1315+
observer.send(event)
13161316
}
13171317
}
13181318

13191319
disposable += signalDisposable
13201320
disposable += signal.observe { event in
13211321
signalDisposable?.dispose()
1322-
observer.action(event)
1322+
observer.send(event)
13231323
}
13241324

13251325
return disposable
@@ -1405,7 +1405,7 @@ extension Signal {
14051405
disposable += self.observe { event in
14061406
guard let value = event.value else {
14071407
schedulerDisposable.inner = scheduler.schedule {
1408-
observer.action(event)
1408+
observer.send(event)
14091409
}
14101410
return
14111411
}
@@ -1533,7 +1533,7 @@ extension Signal {
15331533

15341534
if let event = eventToSend {
15351535
schedulerDisposable.inner = scheduler.schedule {
1536-
observer.action(event)
1536+
observer.send(event)
15371537
}
15381538
}
15391539
}
@@ -1584,7 +1584,7 @@ extension Signal {
15841584

15851585
case .completed, .failed, .interrupted:
15861586
d.inner = scheduler.schedule {
1587-
observer.action(event)
1587+
observer.send(event)
15881588
}
15891589
}
15901590
}
@@ -1869,7 +1869,7 @@ extension Signal {
18691869
}
18701870

18711871
for (index, action) in builder.startHandlers.enumerated() where !disposables.isDisposed {
1872-
disposables += action(index, strategy) { observer.action($0.map { _ in fatalError() }) }
1872+
disposables += action(index, strategy) { observer.send($0.map { _ in fatalError() }) }
18731873
}
18741874

18751875
return disposables

Sources/SignalProducer.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1978,7 +1978,7 @@ extension SignalProducer {
19781978
observer.sendCompleted()
19791979
}
19801980
} else {
1981-
observer.action(event)
1981+
observer.send(event)
19821982
}
19831983
}
19841984
}
@@ -2271,7 +2271,7 @@ extension SignalProducer {
22712271
defer { state.enqueue(event) }
22722272
return state.observers
22732273
}
2274-
observers?.forEach { $0.action(event) }
2274+
observers?.forEach { $0.send(event) }
22752275
}
22762276
}
22772277

@@ -2420,7 +2420,7 @@ private struct ReplayState<Value, Error: Swift.Error> {
24202420
}
24212421

24222422
if let event = terminationEvent {
2423-
observer.action(event)
2423+
observer.send(event)
24242424
}
24252425

24262426
return .success(observers?.insert(observer))

Tests/ReactiveSwiftTests/SignalLifetimeSpec.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -481,7 +481,7 @@ class SignalLifetimeSpec: QuickSpec {
481481
private extension Signal {
482482
func testTransform() -> Signal<Value, Error> {
483483
return Signal { observer in
484-
return self.observe(observer.action)
484+
return self.observe(observer.send)
485485
}
486486
}
487487
}

0 commit comments

Comments
 (0)