1
- import Combine
1
+ import ReactiveSwift
2
2
import ComposableArchitecture
3
3
import UIKit
4
4
@@ -63,7 +63,7 @@ struct RootEnvironment {
63
63
var downloadClient : DownloadClient
64
64
var favorite : ( UUID , Bool ) -> Effect < Bool , Error >
65
65
var fetchNumber : ( ) -> Effect < Int , Never >
66
- var mainQueue : AnySchedulerOf < DispatchQueue >
66
+ var mainQueue : DateScheduler
67
67
var numberFact : ( Int ) -> Effect < String , NumbersApiError >
68
68
var trivia : ( Int ) -> Effect < String , TriviaApiError >
69
69
var userDidTakeScreenshot : Effect < Void , Never >
@@ -75,10 +75,10 @@ struct RootEnvironment {
75
75
downloadClient: . live,
76
76
favorite: favorite ( id: isFavorite: ) ,
77
77
fetchNumber: liveFetchNumber,
78
- mainQueue: DispatchQueue . main. eraseToAnyScheduler ( ) ,
78
+ mainQueue: QueueScheduler . main,
79
79
numberFact: liveNumberFact ( for: ) ,
80
80
trivia: liveTrivia ( for: ) ,
81
- userDidTakeScreenshot: liveUserDidTakeScreenshot,
81
+ userDidTakeScreenshot: liveUserDidTakeScreenshot. producer ,
82
82
uuid: UUID . init,
83
83
webSocket: . live
84
84
)
@@ -253,41 +253,34 @@ let rootReducer = Reducer<RootState, RootAction, RootEnvironment>.combine(
253
253
// Typically this live implementation of the dependency would live in its own module so that the
254
254
// main feature doesn't need to compile it.
255
255
func liveNumberFact( for n: Int ) -> Effect < String , NumbersApiError > {
256
- return URLSession . shared. dataTaskPublisher ( for : URL ( string: " http://numbersapi.com/ \( n) /trivia " ) !)
256
+ URLSession . shared. reactive . data ( with : URLRequest ( url : URL ( string: " http://numbersapi.com/ \( n) /trivia " ) !) )
257
257
. map { data, _ in String ( decoding: data, as: UTF8 . self) }
258
- . catch { _ in
259
- // Sometimes numbersapi.com can be flakey, so if it ever fails we will just
260
- // default to a mock response.
261
- Just ( " \( n) is a good number Brent " )
262
- . delay ( for: 1 , scheduler: DispatchQueue . main)
258
+ . flatMapError { _ in
259
+ Effect ( value: " \( n) is a good number Brent " )
260
+ . delay ( 1 , on: QueueScheduler . main)
263
261
}
264
- . mapError { _ in NumbersApiError ( ) }
265
- . eraseToEffect ( )
262
+ . promoteError ( NumbersApiError . self)
266
263
}
267
264
268
265
// This is the "live" trivia dependency that reaches into the outside world to fetch trivia.
269
266
// Typically this live implementation of the dependency would live in its own module so that the
270
267
// main feature doesn't need to compile it.
271
268
func liveTrivia( for n: Int ) -> Effect < String , TriviaApiError > {
272
- URLSession . shared. dataTaskPublisher ( for : URL ( string: " http://numbersapi.com/ \( n) /trivia " ) !)
269
+ URLSession . shared. reactive . data ( with : URLRequest ( url : URL ( string: " http://numbersapi.com/ \( n) /trivia " ) !) )
273
270
. map { data, _ in String . init ( decoding: data, as: UTF8 . self) }
274
- . catch { _ in
275
- // Sometimes numbersapi.com can be flakey, so if it ever fails we will just
276
- // default to a mock response.
277
- Just ( " \( n) is a good number Brent " )
278
- . delay ( for: 1 , scheduler: DispatchQueue . main)
271
+ . flatMapError { _ in
272
+ Effect ( value: " \( n) is a good number Brent " )
273
+ . delay ( 1 , on: QueueScheduler . main)
279
274
}
280
- . mapError { _ in TriviaApiError ( ) }
281
- . eraseToEffect ( )
275
+ . promoteError ( TriviaApiError . self)
282
276
}
283
277
284
278
private func liveFetchNumber( ) -> Effect < Int , Never > {
285
- Deferred { Just ( Int . random ( in: 1 ... 1_000 ) ) }
286
- . delay ( for: 1 , scheduler: DispatchQueue . main)
287
- . eraseToEffect ( )
279
+ Effect . deferred { Effect ( value: Int . random ( in: 1 ... 1_000 ) ) }
280
+ . delay ( 1 , on: QueueScheduler . main)
288
281
}
289
282
290
283
private let liveUserDidTakeScreenshot = NotificationCenter . default
291
- . publisher ( for : UIApplication . userDidTakeScreenshotNotification)
284
+ . reactive . notifications ( forName : UIApplication . userDidTakeScreenshotNotification)
292
285
. map { _ in ( ) }
293
- . eraseToEffect ( )
286
+
0 commit comments