FluxxKit 1.1.0

FluxxKit 1.1.0

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最后发布2017年10月
SwiftSwift版本4.0
SPM支持SPM

Keita Oouchi维护。



FluxxKit 1.1.0

  • 作者
  • keitaoouchi

FluxxKit

概述

iOS中响应式编程的单向数据流。

Facebook的Flux实现移植到Swift,除了当存储状态改变时调用回调。

为什么没有回调?

我们已经有RxSwift、ReactiveSwift、ReactiveKit或其他类似的东西。所有有状态的东西都可以实现为Observable或Stream,而ViewController可以将其绑定并响应。

示例

要运行示例项目,首先克隆存储库,然后从示例目录运行pod install

更复杂的现实世界示例见这里

GIF

入门

  1. 状态
import FluxxKit
import RxSwift

final class ViewModel: StateType {
  var count = Observable<Int>(0)
}
  1. 动作
extension ViewModel {
  enum Action: ActionType {
    case plus
    case minus
  }
}
  1. 还原者
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
      }
    }
  }
}
  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)
}

架构

(👻这里有一个很好的图👻)

Flux

View -> Action -> Dispatcher -> (Middleware) -> Store -> Reducer -> Observable
  • 当用户与视图控制器交互时,会传播一个动作
  • 通过中央的派发器
  • 到各种保存应用程序数据的存储
  • 在可以响应分发动作的一些存储中发生状态转换
  • 这将向这些存储中的Observable属性发出新项目。

响应式编程

Observable ---> View
  • ViewController订阅存储的Observable属性,
  • 并做出响应。

要求

iOS 9或更高版本。Swift3.0或更高版本。

安装

FluxxKit 可以通过 CocoaPods 或 Carthage 获取。

作者

keitaoouchi, [email protected]

许可证

FluxxKit 遵循 MIT 许可协议。更多信息请参阅 LICENSE 文件。