30. Dispatcher
class SomeDispatcher {
static let shared = SomeDispatcher()
let loading = DispatchSubject<Bool>()
let error = DispatchSubject<Error>()
let someModel = DispatchSubject<SomeModel>()
…
}
Dispatcherクラス
31. Dispatcher
let loading = DispatchSubject<Bool>()
let error = DispatchSubject<Error>()
let someModel = DispatchSubject<SomeModel>()
ActionTypeの代わりにDispatchSubjectを複数用意
※Dispatcherクラスも用途ごとに分けてます
52. Flux: Store
class Store {
let disposeBag = DisposeBag()
func bind<O, E>(_ observable: O, _ param: Variable<E>) where O: ObservableType, E == O.E
{
observable.bindTo(param).addDisposableTo(disposeBag)
}
func bind<O, E>(_ observable: O, _ param: PublishSubject<E>) where O: ObservableType, E
== O.E {
observable.bindTo(param).addDisposableTo(disposeBag)
}
}
Store親クラス
53. Flux: Store
func bind<O, E>(_ observable: O, _ param: Variable<E>) where O: ObservableType, E == O.E
{
observable.bindTo(param).addDisposableTo(disposeBag)
}
Variable用のbind
54. Flux: Store
func bind<O, E>(_ observable: O, _ param: PublishSubject<E>) where O: ObservableType, E
== O.E {
observable.bindTo(param).addDisposableTo(disposeBag)
}
PublishSubject用のbind
55. Flux: Store
class SomeStore: Store {
static let shared = SomeStore()
let loading = Variable<Bool>(false)
let error = PublishSubject<Error>()
let someModel = Variable<SomeModel>(SomeModel())
init(dispatcher: SomeDispatcher = .shared) {
super.init()
bind(dispatcher.loading, loading)
bind(dispatcher.error, error)
bind(dispatcher.someModel, someModel)
}
}
Storeクラス
57. Flux: Store
let loading = Variable<Bool>(false)
let error = PublishSubject<Error>()
let someModel = Variable<SomeModel>(SomeModel())
StoreのpropertyはVariableとPublishSubject