ModuleOutput.md
December 30, 2022 ยท View on GitHub
Add ModuleOutput
- Udpate
MainModuleBuilder.swift
import Foundation
import Highway
protocol MainModuleOutput: AnyObject {
func mainModuleDidTapRandomButton()
}
final class MainModuleBuilder {
func build(store: Store<MainFeature.State, MainFeature.Action>) -> UIViewController {
return MainViewController(store: store)
}
}
- Go to
MainFlowCoordinator.swift - Add import
// ...
import Highway
- Add store property
final class MainFlowCoordinator {
// ...
private var store: Store<MainFeature.State, MainFeature.Action>!
- Update start function
func start() {
let store = Store<MainFeature.State, MainFeature.Action>(
reducer: MainFeature.reducer(),
state: MainFeature.State(),
initialAction: nil,
middleware: MainFeature.middleware(
environment: .init(moduleOutput: self)
)
)
self.store = store
let mainViewController = MainModuleBuilder().build(store: store)
window.rootViewController = mainViewController
self.rootViewController = mainViewController
}
- Go to
MainFeature.swift - Add following to the end of the file
extension MainFeature {
final class Environment {
weak var moduleOutput: MainModuleOutput!
init(moduleOutput: MainModuleOutput) {
self.moduleOutput = moduleOutput
}
}
}
- Add an environment argument to the
middlewarefunc
extension MainFeature {
static func middleware(environment: Environment) -> [Middleware<MainFeature.State, MainFeature.Action>] {
// ...
}
}
- Go to the
MainFlowCoordinator.swiftand add following to the end of file
extension MainFlowCoordinator: MainModuleOutput {
func mainModuleDidTapRandomButton() {
// TODO: show random module
}
}