Skip to content

Commit 83e5886

Browse files
committed
ReactiveSwift adaptations for latest changes.
1 parent f33db9d commit 83e5886

File tree

4 files changed

+54
-55
lines changed

4 files changed

+54
-55
lines changed

Examples/MotionManager/MotionManager/MotionManagerView.swift

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -184,8 +184,7 @@ struct AppView_Previews: PreviewProvider {
184184
deviceMotion: { _ in nil },
185185
startDeviceMotionUpdates: { _, _, _ in
186186
isStarted = true
187-
return Timer.publish(every: 0.01, on: .main, in: .default)
188-
.autoconnect()
187+
return Effect.timer(interval: .milliseconds(100), on: QueueScheduler.main)
189188
.filter { _ in isStarted }
190189
.map { $0.timeIntervalSince1970 * 2 }
191190
.map { t in
@@ -199,8 +198,7 @@ struct AppView_Previews: PreviewProvider {
199198
userAcceleration: .init(x: -cos(-3 * t), y: sin(2 * t), z: -cos(t))
200199
)
201200
}
202-
.setFailureType(to: Error.self)
203-
.eraseToEffect()
201+
.promoteError()
204202
},
205203
stopDeviceMotionUpdates: { _ in
206204
.fireAndForget { isStarted = false }

Examples/MotionManager/MotionManagerTests/MotionTests.swift

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import Combine
1+
import ReactiveSwift
22
import ComposableArchitecture
33
import ComposableCoreMotion
44
import CoreMotion
@@ -8,7 +8,7 @@ import XCTest
88

99
class MotionTests: XCTestCase {
1010
func testMotionUpdate() {
11-
let motionSubject = PassthroughSubject<DeviceMotion, Error>()
11+
let motionSubject = Signal<DeviceMotion, Error>.pipe()
1212

1313
var motionManagerIsLive = false
1414

@@ -20,9 +20,9 @@ class MotionTests: XCTestCase {
2020
create: { _ in .fireAndForget { motionManagerIsLive = true } },
2121
destroy: { _ in .fireAndForget { motionManagerIsLive = false } },
2222
deviceMotion: { _ in nil },
23-
startDeviceMotionUpdates: { _, _, _ in motionSubject.eraseToEffect() },
23+
startDeviceMotionUpdates: { _, _, _ in motionSubject.output.producer },
2424
stopDeviceMotionUpdates: { _ in
25-
.fireAndForget { motionSubject.send(completion: .finished) }
25+
.fireAndForget { motionSubject.input.sendCompleted() }
2626
}
2727
)
2828
)
@@ -44,7 +44,7 @@ class MotionTests: XCTestCase {
4444
XCTAssertEqual(motionManagerIsLive, true)
4545
},
4646

47-
.do { motionSubject.send(deviceMotion) },
47+
.do { motionSubject.input.send(value: deviceMotion) },
4848
.receive(.motionUpdate(.success(deviceMotion))) {
4949
$0.z = [32]
5050
},
@@ -57,7 +57,7 @@ class MotionTests: XCTestCase {
5757
}
5858

5959
func testFacingDirection() {
60-
let motionSubject = PassthroughSubject<DeviceMotion, Error>()
60+
let motionSubject = Signal<DeviceMotion, Error>.pipe()
6161
var motionManagerIsLive = false
6262

6363
let initialDeviceMotion = DeviceMotion(
@@ -80,9 +80,9 @@ class MotionTests: XCTestCase {
8080
create: { _ in .fireAndForget { motionManagerIsLive = true } },
8181
destroy: { _ in .fireAndForget { motionManagerIsLive = false } },
8282
deviceMotion: { _ in initialDeviceMotion },
83-
startDeviceMotionUpdates: { _, _, _ in motionSubject.eraseToEffect() },
83+
startDeviceMotionUpdates: { _, _, _ in motionSubject.output.producer },
8484
stopDeviceMotionUpdates: { _ in
85-
.fireAndForget { motionSubject.send(completion: .finished) }
85+
.fireAndForget { motionSubject.input.sendCompleted() }
8686
}
8787
)
8888
)
@@ -94,14 +94,14 @@ class MotionTests: XCTestCase {
9494
XCTAssertEqual(motionManagerIsLive, true)
9595
},
9696

97-
.do { motionSubject.send(initialDeviceMotion) },
97+
.do { motionSubject.input.send(value: initialDeviceMotion) },
9898
.receive(.motionUpdate(.success(initialDeviceMotion))) {
9999
$0.facingDirection = .forward
100100
$0.initialAttitude = initialDeviceMotion.attitude
101101
$0.z = [0]
102102
},
103103

104-
.do { motionSubject.send(updatedDeviceMotion) },
104+
.do { motionSubject.input.send(value: updatedDeviceMotion) },
105105
.receive(.motionUpdate(.success(updatedDeviceMotion))) {
106106
$0.z = [0, 0]
107107
$0.facingDirection = .backward

Examples/VoiceMemos/VoiceMemos/VoiceMemo.swift

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import ComposableArchitecture
2+
import ReactiveSwift
23
import Foundation
34
import SwiftUI
45

@@ -35,7 +36,7 @@ enum VoiceMemoAction: Equatable {
3536

3637
struct VoiceMemoEnvironment {
3738
var audioPlayerClient: AudioPlayerClient
38-
var mainQueue: AnySchedulerOf<DispatchQueue>
39+
var mainQueue: DateScheduler
3940
}
4041

4142
let voiceMemoReducer = Reducer<VoiceMemo, VoiceMemoAction, VoiceMemoEnvironment> {
@@ -50,27 +51,26 @@ let voiceMemoReducer = Reducer<VoiceMemo, VoiceMemoAction, VoiceMemoEnvironment>
5051

5152
case .delete:
5253
return .merge(
53-
.cancel(id: PlayerId()),
54-
.cancel(id: TimerId())
54+
Effect.cancel(id: PlayerId()),
55+
Effect.cancel(id: TimerId())
5556
)
5657

5758
case .playButtonTapped:
5859
switch memo.mode {
5960
case .notPlaying:
6061
memo.mode = .playing(progress: 0)
61-
let start = environment.mainQueue.now
62+
let start = environment.mainQueue.currentDate
6263
return .merge(
6364
environment.audioPlayerClient
6465
.play(PlayerId(), memo.url)
6566
.catchToEffect()
6667
.map(VoiceMemoAction.audioPlayerClient)
6768
.cancellable(id: PlayerId()),
6869

69-
Effect.timer(id: TimerId(), every: 0.5, on: environment.mainQueue)
70-
.map {
70+
Effect.timer(id: TimerId(), every: .milliseconds(500), on: environment.mainQueue)
71+
.map { date -> VoiceMemoAction in
7172
.timerUpdated(
72-
TimeInterval($0.dispatchTime.uptimeNanoseconds - start.dispatchTime.uptimeNanoseconds)
73-
/ TimeInterval(NSEC_PER_SEC)
73+
date.timeIntervalSinceReferenceDate - start.timeIntervalSinceReferenceDate
7474
)
7575
}
7676
)

Sources/ComposableCoreMotion/MotionManager/MotionManagerLive.swift

Lines changed: 34 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import Combine
21
import ComposableArchitecture
32
import CoreMotion
3+
import ReactiveSwift
44

55
@available(iOS 4.0, *)
66
@available(macCatalyst 13.0, *)
@@ -96,93 +96,94 @@ extension MotionManager {
9696
}
9797
},
9898
startAccelerometerUpdates: { id, queue in
99-
return Effect.run { subscriber in
99+
return Effect { subscriber, lifetime in
100100
guard let manager = managers[id]
101101
else {
102102
couldNotFindMotionManager(id: id)
103-
return AnyCancellable {}
103+
return
104104
}
105105
guard accelerometerUpdatesSubscribers[id] == nil
106-
else { return AnyCancellable {} }
106+
else { return }
107107

108108
accelerometerUpdatesSubscribers[id] = subscriber
109109
manager.startAccelerometerUpdates(to: queue) { data, error in
110110
if let data = data {
111-
subscriber.send(.init(data))
111+
subscriber.send(value: .init(data))
112112
} else if let error = error {
113-
subscriber.send(completion: .failure(error))
113+
subscriber.send(error: error)
114114
}
115115
}
116-
return AnyCancellable {
116+
117+
lifetime += AnyDisposable {
117118
manager.stopAccelerometerUpdates()
118119
}
119120
}
120121
},
121122
startDeviceMotionUpdates: { id, frame, queue in
122-
return Effect.run { subscriber in
123+
return Effect { subscriber, Lifetime in
123124
guard let manager = managers[id]
124125
else {
125126
couldNotFindMotionManager(id: id)
126-
return AnyCancellable {}
127+
return
127128
}
128129
guard deviceMotionUpdatesSubscribers[id] == nil
129-
else { return AnyCancellable {} }
130+
else { return }
130131

131132
deviceMotionUpdatesSubscribers[id] = subscriber
132133
manager.startDeviceMotionUpdates(using: frame, to: queue) { data, error in
133134
if let data = data {
134-
subscriber.send(.init(data))
135+
subscriber.send(value: .init(data))
135136
} else if let error = error {
136-
subscriber.send(completion: .failure(error))
137+
subscriber.send(error: error)
137138
}
138139
}
139-
return AnyCancellable {
140+
Lifetime += AnyDisposable {
140141
manager.stopDeviceMotionUpdates()
141142
}
142143
}
143144
},
144145
startGyroUpdates: { id, queue in
145-
return Effect.run { subscriber in
146+
return Effect { subscriber, lifetime in
146147
guard let manager = managers[id]
147148
else {
148149
couldNotFindMotionManager(id: id)
149-
return AnyCancellable {}
150+
return
150151
}
151152
guard deviceGyroUpdatesSubscribers[id] == nil
152-
else { return AnyCancellable {} }
153+
else { return }
153154

154155
deviceGyroUpdatesSubscribers[id] = subscriber
155156
manager.startGyroUpdates(to: queue) { data, error in
156157
if let data = data {
157-
subscriber.send(.init(data))
158+
subscriber.send(value: .init(data))
158159
} else if let error = error {
159-
subscriber.send(completion: .failure(error))
160+
subscriber.send(error: error)
160161
}
161162
}
162-
return AnyCancellable {
163+
lifetime += AnyDisposable {
163164
manager.stopGyroUpdates()
164165
}
165166
}
166167
},
167168
startMagnetometerUpdates: { id, queue in
168-
return Effect.run { subscriber in
169+
return Effect { subscriber, lifetime in
169170
guard let manager = managers[id]
170171
else {
171172
couldNotFindMotionManager(id: id)
172-
return AnyCancellable {}
173+
return
173174
}
174175
guard deviceMagnetometerUpdatesSubscribers[id] == nil
175-
else { return AnyCancellable {} }
176+
else { return }
176177

177178
deviceMagnetometerUpdatesSubscribers[id] = subscriber
178179
manager.startMagnetometerUpdates(to: queue) { data, error in
179180
if let data = data {
180-
subscriber.send(.init(data))
181+
subscriber.send(value: .init(data))
181182
} else if let error = error {
182-
subscriber.send(completion: .failure(error))
183+
subscriber.send(error: error)
183184
}
184185
}
185-
return AnyCancellable {
186+
lifetime += AnyDisposable {
186187
manager.stopMagnetometerUpdates()
187188
}
188189
}
@@ -195,7 +196,7 @@ extension MotionManager {
195196
return
196197
}
197198
manager.stopAccelerometerUpdates()
198-
accelerometerUpdatesSubscribers[id]?.send(completion: .finished)
199+
accelerometerUpdatesSubscribers[id]?.sendCompleted()
199200
accelerometerUpdatesSubscribers[id] = nil
200201
}
201202
},
@@ -207,7 +208,7 @@ extension MotionManager {
207208
return
208209
}
209210
manager.stopDeviceMotionUpdates()
210-
deviceMotionUpdatesSubscribers[id]?.send(completion: .finished)
211+
deviceMotionUpdatesSubscribers[id]?.sendCompleted()
211212
deviceMotionUpdatesSubscribers[id] = nil
212213
}
213214
},
@@ -219,7 +220,7 @@ extension MotionManager {
219220
return
220221
}
221222
manager.stopGyroUpdates()
222-
deviceGyroUpdatesSubscribers[id]?.send(completion: .finished)
223+
deviceGyroUpdatesSubscribers[id]?.sendCompleted()
223224
deviceGyroUpdatesSubscribers[id] = nil
224225
}
225226
},
@@ -231,19 +232,19 @@ extension MotionManager {
231232
return
232233
}
233234
manager.stopMagnetometerUpdates()
234-
deviceMagnetometerUpdatesSubscribers[id]?.send(completion: .finished)
235+
deviceMagnetometerUpdatesSubscribers[id]?.sendCompleted()
235236
deviceMagnetometerUpdatesSubscribers[id] = nil
236237
}
237238
})
238239
}
239240

240241
private var accelerometerUpdatesSubscribers:
241-
[AnyHashable: Effect<AccelerometerData, Error>.Subscriber] = [:]
242-
private var deviceMotionUpdatesSubscribers: [AnyHashable: Effect<DeviceMotion, Error>.Subscriber] =
242+
[AnyHashable: Signal<AccelerometerData, Error>.Observer] = [:]
243+
private var deviceMotionUpdatesSubscribers: [AnyHashable: Signal<DeviceMotion, Error>.Observer] =
243244
[:]
244-
private var deviceGyroUpdatesSubscribers: [AnyHashable: Effect<GyroData, Error>.Subscriber] = [:]
245+
private var deviceGyroUpdatesSubscribers: [AnyHashable: Signal<GyroData, Error>.Observer] = [:]
245246
private var deviceMagnetometerUpdatesSubscribers:
246-
[AnyHashable: Effect<MagnetometerData, Error>.Subscriber] = [:]
247+
[AnyHashable: Signal<MagnetometerData, Error>.Observer] = [:]
247248

248249
@available(iOS 4.0, *)
249250
@available(macCatalyst 13.0, *)

0 commit comments

Comments
 (0)