Dispatcher
class SomeDispatcher {
staticlet 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クラスも用途ごとに分けてます
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クラス
Flux: Store
let loading= Variable<Bool>(false)
let error = PublishSubject<Error>()
let someModel = Variable<SomeModel>(SomeModel())
StoreのpropertyはVariableとPublishSubject