测试已测试 | ✓ |
语言语言 | SwiftSwift |
许可证 | MIT |
发布最后发布 | 2017年10月 |
SwiftSwift版本 | 4.0 |
SPM支持SPM | ✗ |
由Keita Oouchi维护。
iOS中响应式编程的单向数据流。
将Facebook的Flux实现移植到Swift,除了当存储状态改变时调用回调。
我们已经有RxSwift、ReactiveSwift、ReactiveKit或其他类似的东西。所有有状态的东西都可以实现为Observable或Stream,而ViewController可以将其绑定并响应。
要运行示例项目,首先克隆存储库,然后从示例目录运行pod install
。
更复杂的现实世界示例见这里。
import FluxxKit
import RxSwift
final class ViewModel: StateType {
var count = Observable<Int>(0)
}
extension ViewModel {
enum Action: ActionType {
case plus
case minus
}
}
extension ViewModel {
final class Reducer: FluxxKit.Reducer<ViewModel, Action> {
override func reduce(state: ViewModel, action: Action) {
switch action {
case .plus:
state.count.value = state.count + 1
case .minus:
state.count.value = state.count - 1
}
}
}
}
创建存储并注册到派发器,并绑定存储的状态
import FluxxKit
import RxSWift
final class ViewController: UIViewController {
@IBOutlet var counterLabel: UILabel!
@IBOutlet var plusButton: UIButton!
@IBOutlet var minusButton: UIButton!
var store = Store<ViewModel, ViewModel.Action>(
reducer: ViewModel.Reducer()
)
override func viewDidLoad() {
super.viewDidLoad()
Dispatcher.shared.register(store: self.store)
store.state.count.asObservable().onserveOn(MainScheduler.instance)
.subscribe(onNext: { [weak self] count in
self?.counterLabel.text = "\(count)"
})
}
deinit {
Dispatcher.shared.unregister(identifier: self.store.identifier)
}
}
使用UI动作派发动作
@IBAction
func onTouchPlusButton(sender: Any) {
Dispatcher.shared.dispatch(action: ViewModel.Action.plus)
}
@IBAction
func onTouchMinusButton(sender: Any) {
Dispatcher.shared.dispatch(action: ViewModel.Action.minus)
}
(
View -> Action -> Dispatcher -> (Middleware) -> Store -> Reducer -> Observable
动作
派发器
,存储
,动作
的一些存储
中发生状态转换
,存储
中的Observable
属性发出新项目。Observable ---> View
Observable
属性,iOS 9或更高版本。Swift3.0或更高版本。
FluxxKit 可以通过 CocoaPods 或 Carthage 获取。
keitaoouchi, [email protected]
FluxxKit 遵循 MIT 许可协议。更多信息请参阅 LICENSE 文件。