What you can do is put the publisher in your environment and then use something like a didFinishLaunching
action to subscribing to it:
struct HomeState { ... }
enum HomeAction {
case didFinishLaunching
case dataResponse(Result<SomeData, SomeError>)
// other actions
}
struct HomeEnvironment {
var data: Effect<SomeData, SomeError>
// other dependencies
}
let homeReducer = Reducer<HomeState, HomeAction, HomeEnvironment> { state, action, environment in
switch action {
case .didFinishLaunching:
return environment.data
.catchToEffect()
.map(HomeAction.dataResponse)
case let .dataResponse(.success(data)):
// do something with data
case let .dataResponse(.failure(error)):
// do something with error
}
}
Hope it helps.