]> git.r.bdr.sh - rbdr/map/blob - Map/State/Store.swift
7860f33870d94a7385884aa30513867cf16c4e42
[rbdr/map] / Map / State / Store.swift
1 import Foundation
2
3 final class Store<State, Action>: ObservableObject {
4 @Published private(set) var state: State
5
6 private let reducer: Reducer<State, Action>
7
8 init(initialState: State, reducer: @escaping Reducer<State, Action>) {
9 self.state = initialState
10 self.reducer = reducer
11 }
12
13 func send(_ action: Action) {
14 reducer(&state, action)
15 }
16 }
17
18 typealias Reducer<State, Action> = (inout State, Action) -> Void