Proof of concept for Cachopo: A Rx + Redux framework for Swift
rxStore.dispatch(MyAction)
rxStore.observable { $0.substate }
.subscribeNext {
print("Substate: \($0)")
}
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) }
}
}
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) }
}
}
public func dispatch(asyncAction:AsyncAction) -> Observable<Void>
rxStore.dispatch(action)
.trackActivityUI(showActivityIndicator)
.catchError(handleError)
.subscribe()
.addDisposableTo(disposeBag)