Skip to content

Instantly share code, notes, and snippets.

View thiagolioy's full-sized avatar

Thiago Lioy thiagolioy

View GitHub Profile
func setupNavigationBackAction() {
self.navigationItem.hidesBackButton = true
var customBackButton = UIBarButtonItem(title: "Back", style: .done,
target: nil, action: nil)
customBackButton.rx.action = viewModel.backAction()
self.navigationItem.leftBarButtonItem = customBackButton
}
import UIKit
import RxSwift
import ReSwift
class CharacterFavoriteView: FavoriteView, StoreSubscriber {
var character: Character?
override init(frame: CGRect) {
super.init(frame: frame)
import ReSwift
struct FetchedCharactersReducer: Reducer {
let apiManager: MarvelAPICalls
func handleAction(action: Action, state: FetchedCharactersState?) -> FetchedCharactersState {
switch action {
case let action as FetchCharactersAction:
fetchCharacters(query: action.query)
import ReSwift
struct FavoriteReducer: Reducer {
func handleAction(action: Action, state: FavoritesState?) -> FavoritesState {
let realmManager = RealmManager()
switch action {
case let action as FavoriteAction:
realmManager.favorite(character: action.character)
case let action as UnfavoriteAction:
realmManager.unfavorite(character: action.character)
import ReSwift
struct AppReducer: Reducer {
let apiManager = MarvelAPIManager()
func handleAction(action: Action, state: AppState?) -> AppState {
return AppState(
favoritesState: FavoriteReducer().handleAction(action: action, state: state?.favoritesState),
fetchedCharactersState: FetchedCharactersReducer(apiManager: apiManager)
.handleAction(action: action, state: state?.fetchedCharactersState)
import ReSwift
struct FavoriteAction: Action {
let character: Character
}
struct UnfavoriteAction: Action {
let character: Character
}
import UIKit
import ReSwift
let store = Store<AppState>(reducer: AppReducer(), state: nil)
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
@thiagolioy
thiagolioy / AppState.swift
Last active January 25, 2017 19:45
AppState.swift
import Foundation
import ReSwift
struct AppState: StateType {
var favoritesState: FavoritesState
var fetchedCharactersState: FetchedCharactersState
}
struct FavoritesState: StateType {
var favorites: [FavoriteCharacter] = []
import RealmSwift
import RxSwift
import RxRealm
class FavoriteCharacter: Object {
dynamic var id = 0
dynamic var isFavorite = true
convenience init(character: Character) {
self.init()
import RxSwift
class CharacterFavoriteView: FavoriteView {
var disposeBag: DisposeBag?
let realmManager = RealmManager()
var character: Character?
override init(frame: CGRect) {
super.init(frame: frame)