aboutsummaryrefslogtreecommitdiff
path: root/Map/Data/Store.swift
blob: 7860f33870d94a7385884aa30513867cf16c4e42 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import Foundation

final class Store<State, Action>: ObservableObject {
  @Published private(set) var state: State

  private let reducer: Reducer<State, Action>

  init(initialState: State, reducer: @escaping Reducer<State, Action>) {
    self.state = initialState
    self.reducer = reducer
  }

  func send(_ action: Action) {
    reducer(&state, action)
  }
}

typealias Reducer<State, Action> = (inout State, Action) -> Void