Skip to content

Commit 71263b2

Browse files
committed
Merge pull request #55 from ikesyo/new-observer-api
Replace `start` and `observe` overloads with new Observer API
2 parents 22b37da + 268ab5e commit 71263b2

File tree

9 files changed

+29
-65
lines changed

9 files changed

+29
-65
lines changed

Source/Foundation/Association.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public func associatedProperty<T: AnyObject>(host: AnyObject, keyPath: StaticStr
5858
public func associatedProperty<T>(host: AnyObject, key: UnsafePointer<()>, initial: () -> T, setter: T -> ()) -> MutableProperty<T> {
5959
return associatedObject(host, key: key) {
6060
let property = MutableProperty(initial())
61-
property.producer.start(next: setter)
61+
property.producer.start(Observer(next: setter))
6262
return property
6363
}
6464
}

Source/Foundation/NSObject.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ extension NSObject {
6161
public func rex_valueProperty<T>(key: UnsafePointer<()>, _ initial: () -> T, _ setter: T -> ()) -> MutableProperty<T> {
6262
return associatedObject(self, key: key) {
6363
let property = MutableProperty(initial())
64-
property.producer.start(next: setter)
64+
property.producer.start(Observer(next: setter))
6565
return property
6666
}
6767
}

Source/Signal.swift

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,29 +10,11 @@ import ReactiveCocoa
1010

1111
extension SignalType {
1212

13-
/// Bring back the `observe` overload. The `observeNext` or pattern matching
14-
/// on `observe(Event)` is still annoying in practice and more verbose. This is
15-
/// also likely to change in a later RAC 4 alpha.
16-
internal func observe(next next: (Value -> ())? = nil, error: (Error -> ())? = nil, completed: (() -> ())? = nil, interrupted: (() -> ())? = nil) -> Disposable? {
17-
return self.observe { (event: Event<Value, Error>) in
18-
switch event {
19-
case let .Next(value):
20-
next?(value)
21-
case let .Error(err):
22-
error?(err)
23-
case .Completed:
24-
completed?()
25-
case .Interrupted:
26-
interrupted?()
27-
}
28-
}
29-
}
30-
3113
/// Applies `transform` to values from `signal` with non-`nil` results unwrapped and
3214
/// forwared on the returned signal.
3315
public func filterMap<U>(transform: Value -> U?) -> Signal<U, Error> {
3416
return Signal<U, Error> { observer in
35-
return self.observe(next: { value in
17+
return self.observe(Observer(next: { value in
3618
if let val = transform(value) {
3719
observer.sendNext(val)
3820
}
@@ -42,7 +24,7 @@ extension SignalType {
4224
observer.sendCompleted()
4325
}, interrupted: {
4426
observer.sendInterrupted()
45-
})
27+
}))
4628
}
4729
}
4830

Source/SignalProducer.swift

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,6 @@ import ReactiveCocoa
1010

1111
extension SignalProducerType {
1212

13-
/// Bring back the `start` overload. The `startNext` or pattern matching
14-
/// on `start(Event)` is annoying in practice and more verbose. This is also
15-
/// likely to change in a later RAC 4 alpha.
16-
internal func start(next next: (Value -> ())? = nil, error: (Error -> ())? = nil, completed: (() -> ())? = nil, interrupted: (() -> ())? = nil) -> Disposable? {
17-
return self.start { (event: Event<Value, Error>) in
18-
switch event {
19-
case let .Next(value):
20-
next?(value)
21-
case let .Error(err):
22-
error?(err)
23-
case .Completed:
24-
completed?()
25-
case .Interrupted:
26-
interrupted?()
27-
}
28-
}
29-
}
30-
3113
/// Buckets each received value into a group based on the key returned
3214
/// from `grouping`. Termination events on the original signal are
3315
/// also forwarded to each producer group.
@@ -38,7 +20,7 @@ extension SignalProducerType {
3820
let lock = NSRecursiveLock()
3921
lock.name = "me.neilpa.rex.groupBy"
4022

41-
self.start(next: { value in
23+
self.start(Observer(next: { value in
4224
let key = grouping(value)
4325

4426
lock.lock()
@@ -65,7 +47,7 @@ extension SignalProducerType {
6547
}, interrupted: { _ in
6648
observer.sendInterrupted()
6749
groups.values.forEach { $0.sendInterrupted() }
68-
})
50+
}))
6951
}
7052
}
7153

Source/UIKit/UIBarButtonItem.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ extension UIBarButtonItem {
1919
let initial = CocoaAction.rex_disabled
2020
let property = MutableProperty(initial)
2121

22-
property.producer.start(next: { next in
22+
property.producer.start(Observer(next: { next in
2323
self?.target = next
2424
self?.action = CocoaAction.selector
25-
})
25+
}))
2626

2727
if let strongSelf = self {
2828
strongSelf.rex_enabled <~ property.producer.flatMap(.Latest) { $0.rex_enabledProducer }

Source/UIKit/UIButton.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ extension UIButton {
2121

2222
property.producer
2323
.combinePrevious(initial)
24-
.start(next: { previous, next in
24+
.start(Observer(next: { previous, next in
2525
self?.removeTarget(previous, action: CocoaAction.selector, forControlEvents: .TouchUpInside)
2626
self?.addTarget(next, action: CocoaAction.selector, forControlEvents: .TouchUpInside)
27-
})
27+
}))
2828

2929
if let strongSelf = self {
3030
strongSelf.rex_enabled <~ property.producer.flatMap(.Latest) { $0.rex_enabledProducer }

Tests/Foundation/NSObjectTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
// Copyright (c) 2015 Neil Pankey. All rights reserved.
77
//
88

9-
@testable import Rex
9+
import Rex
1010
import ReactiveCocoa
1111
import XCTest
1212

@@ -16,7 +16,7 @@ final class NSObjectTests: XCTestCase {
1616
let object = Object()
1717
var value: String = ""
1818

19-
object.rex_producerForKeyPath("string").start(next: { value = $0 })
19+
object.rex_producerForKeyPath("string").start(Observer(next: { value = $0 }))
2020
XCTAssertEqual(value, "foo")
2121

2222
object.string = "bar"

Tests/SignalProducerTests.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
// Copyright (c) 2015 Neil Pankey. All rights reserved.
77
//
88

9-
@testable import Rex
9+
import Rex
1010
import ReactiveCocoa
1111
import XCTest
1212

@@ -22,17 +22,17 @@ final class SignalProducerTests: XCTestCase {
2222

2323
disposable += producer
2424
.groupBy { $0 % 2 == 0 }
25-
.start(next: { key, group in
25+
.start(Observer(next: { key, group in
2626
if key {
27-
group.start(next: { evens.append($0) })
27+
group.start(Observer(next: { evens.append($0) }))
2828
} else {
29-
group.start(next: { odds.append($0) })
29+
group.start(Observer(next: { odds.append($0) }))
3030
}
3131
},completed: {
3232
completed = true
3333
}, interrupted: {
3434
interrupted = true
35-
})
35+
}))
3636

3737
sink.sendNext(1)
3838
XCTAssert(evens == [])

Tests/SignalTests.swift

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
// Copyright (c) 2015 Neil Pankey. All rights reserved.
77
//
88

9-
@testable import Rex
9+
import Rex
1010
import ReactiveCocoa
1111
import XCTest
1212

@@ -20,7 +20,7 @@ final class SignalTests: XCTestCase {
2020
.filterMap {
2121
return $0 % 2 == 0 ? String($0) : nil
2222
}
23-
.observe(next: { values.append($0) })
23+
.observe(Observer(next: { values.append($0) }))
2424

2525
sink.sendNext(1)
2626
XCTAssert(values == [])
@@ -41,9 +41,9 @@ final class SignalTests: XCTestCase {
4141

4242
signal
4343
.ignoreError()
44-
.observe(completed: {
44+
.observe(Observer(completed: {
4545
completed = true
46-
})
46+
}))
4747

4848
sink.sendNext(1)
4949
XCTAssertFalse(completed)
@@ -58,9 +58,9 @@ final class SignalTests: XCTestCase {
5858

5959
signal
6060
.ignoreError(replacement: .Interrupted)
61-
.observe(interrupted: {
61+
.observe(Observer(interrupted: {
6262
interrupted = true
63-
})
63+
}))
6464

6565
sink.sendNext(1)
6666
XCTAssertFalse(interrupted)
@@ -77,10 +77,10 @@ final class SignalTests: XCTestCase {
7777

7878
signal
7979
.timeoutAfter(2, withEvent: .Interrupted, onScheduler: scheduler)
80-
.observe(
80+
.observe(Observer(
8181
completed: { completed = true },
8282
interrupted: { interrupted = true }
83-
)
83+
))
8484

8585
scheduler.scheduleAfter(1) { sink.sendCompleted() }
8686

@@ -100,10 +100,10 @@ final class SignalTests: XCTestCase {
100100

101101
signal
102102
.timeoutAfter(2, withEvent: .Interrupted, onScheduler: scheduler)
103-
.observe(
103+
.observe(Observer(
104104
completed: { completed = true },
105105
interrupted: { interrupted = true }
106-
)
106+
))
107107

108108
scheduler.scheduleAfter(3) { sink.sendCompleted() }
109109

@@ -121,9 +121,9 @@ final class SignalTests: XCTestCase {
121121

122122
signal
123123
.uncollect()
124-
.observe(next: {
124+
.observe(Observer(next: {
125125
values.append($0)
126-
})
126+
}))
127127

128128
sink.sendNext([])
129129
XCTAssert(values.isEmpty)

0 commit comments

Comments
 (0)