Skip to content

Instantly share code, notes, and snippets.

View atimca's full-sized avatar

Maxim Smirnov atimca

View GitHub Profile
func reduce(state: NewsState, event: AppEvent) -> NewsState
func reduce(state: AppState, event: AppEvent) -> AppState
func reduce(state: NewsState, event: NewsEvent) -> NewsState
let firstReducer: Reducer = { state, event in
var state = state
switch event {
case .newUserWasLoaded(let user):
state.user = user
default:
return state
}
return state
}
func combine(_ reducers: Reducer...) -> Reducer {
return { state, event in
reducers.reduce(state) { state, reducer in
reducer(state, event)
}
}
}
func combine(_ reducers: Reducer...) -> Reducer
typealias Reducer = (AppState, AppEvent) -> AppState
extension AppEvent {
static func reduce(state: AppState, event: AppEvent) -> AppState {
var state = state
switch event {
case .newUserWasLoaded(let user):
state.user = user
case .newsEvents(let event):
if state.newsState == nil {
state.newsState = NewsState(user: state.user, step: .initial)
}
extension AppEvent {
static func reduce(state: AppState, event: AppEvent) -> AppState {
var state = state
switch event {
case .newUserWasLoaded(let user):
state.user = user
case .newsEvents(let event):
if state.newsState == nil {
state.newsState = NewsState(user: state.user, step: .initial)
}
extension AppEvent {
static func reduce(state: AppState, event: AppEvent) -> AppState {
var state = state
switch event {
case .newUserWasLoaded(let user):
state.user = user
case .newsEvents(let event):
switch event {
case .dataLoaded(let data):
state.newsState?.step = .loaded(data: data)