Odrakir / CachopoDemo

Proof of concept for Cachopo: A Rx + Redux framework for Swift

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Cachopo

Proof of concept for Cachopo: A Rx + Redux framework for Swift

Dispatching

rxStore.dispatch(MyAction)

Subscribing

rxStore.observable { $0.substate }
  .subscribeNext {
    print("Substate: \($0)")
  }

Async Actions

struct SetSearchResults:Action {
  let artists:[Artist]
}

func searchArtists(searchString:String) -> Reader<Enviroment, Observable<Action>>
{
    return Reader<Enviroment, Observable<Action>>{ state, enviroment in

        return enviroment.service.load(Artist.matching(searchString))
            .map { SetSearchResults(artists: $0) }   

    }
}

The Reader Monad

public class Reader<E, A> {

    let g: (E) -> A

    init(_ g:(E) -> A) {
        self.g = g
    }

    func run(e: E) -> A {
        return g(e)
    }

    func map<B>(f:(A) -> B) -> Reader<E, B> {
        return Reader<E, B>{ e in f(self.g(e)) }
    }
    func flatMap<B>(f:(A) -> Reader<E, B>) -> Reader<E, B> {
        return Reader<E, B>{ e in f(self.g(e)).g(e) }
    }
}

More info

Cachopo Dispatch Feedback

public func dispatch(asyncAction:AsyncAction) -> Observable<Void>



rxStore.dispatch(action)
  .trackActivityUI(showActivityIndicator)
  .catchError(handleError)
  .subscribe()
  .addDisposableTo(disposeBag)

Diagram

inline

About

Proof of concept for Cachopo: A Rx + Redux framework for Swift


Languages

Language:Swift 99.9%Language:Shell 0.1%