Skip to content

Instantly share code, notes, and snippets.

View atimca's full-sized avatar

Maxim Smirnov atimca

View GitHub Profile
enum AppEvent {
case newUserWasLoaded(User)
case newsEvents(NewsEvent)
var newsEvent: NewsEvent? {
guard case .newsEvents(let event) = self else { return nil }
return event
}
}
func transform(
newsReducer: @escaping (NewsState, NewsEvent) -> NewsState,
stateKeyPath: WritableKeyPath<AppState, NewsState>
) -> Reducer {
return { appState, appEvent in
var appState = appState
appState[keyPath: stateKeyPath] = newsReducer(appState[keyPath: stateKeyPath], appEvent)
return appState
}
}
func transform(newsReducer: (NewsState, NewsEvent) -> NewsState) -> Reducer
func transform(
newsReducer: @escaping (NewsState, AppEvent) -> NewsState,
stateKeyPath: WritableKeyPath<AppState, NewsState>
) -> Reducer {
return { appState, appEvent in
var appState = appState
appState[keyPath: stateKeyPath] = newsReducer(appState[keyPath: stateKeyPath], appEvent)
return appState
}
}
func transform(
newsReducer: @escaping (NewsState, AppEvent) -> NewsState,
appStateIntoNews: @escaping (AppState) -> NewsState,
mutateAppStateWithNewsState: @escaping (AppState, NewsState) -> AppState
) -> Reducer {
return { appState, appEvent in
let newsState = appStateIntoNews(appState)
let newNewsState = newsReducer(newsState, appEvent)
return mutateAppStateWithNewsState(appState, newNewsState)
}
func transform(
newsReducer: @escaping (NewsState, AppEvent) -> NewsState,
appStateIntoNews: @escaping (AppState) -> NewsState
) -> Reducer {
return { appState, appEvent in
var appState = appState
let newsState = appStateIntoNews(appState)
let newNewsState = newsReducer(newsState, appEvent)
appState.newsState = newNewsState
return appState
func transform(
newsReducer: (NewsState, AppEvent) -> NewsState,
appStateIntoNews: (AppState) -> NewsState
) -> Reducer {
return { appState, appEvent in
let newsState = appStateIntoNews(appState)
return newsReducer(newsState, appEvent)
}
}
func transform(newsReducer: (NewsState, AppEvent) -> NewsState) -> Reducer {
return { appState, appEvent in
???
}
}
func transform(newsReducer: (NewsState, AppEvent) -> NewsState) -> Reducer
func reduce(state: AppState, event: AppEvent) -> AppState