SwiftyRedux 0.3.0

SwiftyRedux 0.3.0

Alex Voronov 维护。



Swifty Redux

Build Status

Redux 的 Swift 实现

关于

SwiftyRedux 尽可能地接近 Redux.js 的思想和 API。通过共享相同的词汇和在 js 世界中拥有如此庞大的社区,这使得在 iOS 平台上使用这个工具和理解这种方法变得更容易!尽管由于语言和平台的区别,仍会有一些微小差异。

SwiftyRedux 有几个核心组件

  • 状态 是一个单一的数据结构。它是我们应用程序的真相之源。存储可以是结构体或枚举,它可能包含其他结构体或枚举作为属性。通常它是一个深度嵌套的对象,描述了整个应用程序的状态。请记住,状态应该易于序列化和反序列化,因此不应包含任何行为。状态由存储管理。

  • 存储 是包含状态的地方。它还允许订阅状态更改并分配动作来更改其状态。在整个 Redux 应用程序中只有一个存储。

  • 动作 是一个代表意图更改状态的普通对象。动作不应包含任何行为。所有动作都应该符合空的 Action 协议。更改状态的唯一方式是通过动作,这将

  • 减速器 是唯一可以基于当前状态和动作更改状态的地方。减速器必须是纯函数 - 给定输入返回相同输出的函数,因此不执行任何副作用。这使得它们易于测试和推理影响全局应用程序状态的逻辑。存储负责将动作传递给减速器,并使用它们的结果更新状态。

  • 中间件 是您放置异步逻辑和副作用的地方。这是将 IO 与纯单向流应用程序连接的最佳方式。它们在分配之后和到达减速器之前拦截动作,但您可以根据需要设计中间件,以便它们不会减慢将动作传递给减速器的速度。

有关此方法的更多信息以及 Redux.js 社区经验,请参阅 https://redux.js.cn/introduction/getting-started

流程图

redux

通常情况下,您的流程将与当前图匹配

  1. 您通过Store发送一个Action。
  2. Action传递到Middleware。
  3. Middleware可能会派发一个新的Action(这将从头开始传递)或者进一步传播它。
  4. Reduces接收Action和当前状态。
  5. 它们可能会将Action应用到状态中,以返回新状态,或者在没有需要变化的情况下返回当前状态。
  6. 在状态改变后,任何观察者都将收到它。
  7. 对于UI观察者,Presenters可以将状态或其部分转换为Props,并将其传递给它们的Views进行渲染。
  8. 任何用户操作或程序事件都可以转换为Action,并将派送到Store以从开始这个周期。

安装

CocoaPods

您可以通过将SwiftyRedux添加到你的Podfile中来使用CocoaPods安装它

pod 'SwiftyRedux'

并运行pod install

Carthage

待定

Swift包管理器

待定

沙盒

还有一个沙盒,你可以在这里尝试SwiftyRedux。为了开始使用它

  1. 打开 Example/SwiftyRedux.xcworkspace
  2. 构建 SwiftyRedux-Example 方案。
  3. 最后打开 Example/SwiftyRedux.playground
  4. 选择 视图 > 显示调试区域

项目结构

SwiftyRedux试图将其核心尽可能简约,同时在核心之上还允许进行扩展。
以下是本仓库包含的组件

⚙️核心

核心是基本组件,包含SwiftyRedux所需的全部基本功能 :)
例如 ActionReducerMiddlewareStoreDisposable

pod 'SwiftyRedux/Core'

💊强化

强化扩展提供将来自存储的状态更新转换为声明式API的功能。它的 ObservableObservableProducer 抽象在外观和功能上类似于 ReactiveSwiftSignalSignalProducer

pod 'SwiftyRedux/Steroids'

🚌BatchedActions

批量操作允许一次性发送多个操作,并通过改进的reducer或自定义中间件(但不两者同时使用)将它们拆分为单个操作。灵感来自 redux-batched-actions

pod 'SwiftyRedux/BatchedActions'

💥SideEffects

副作用是一种在reducer收到并处理了操作之后运行的中间件,因此它们不能“吞下”或延迟它。灵感来自 redux-observableEpics 但这是一种“命令式”的epics。

pod 'SwiftyRedux/SideEffects'

📦Command

命令是围绕包含额外调用方元信息的函数的简单包装器,以便更容易地进行调试。

pod 'SwiftyRedux/Command'

🚀Epics

实际上epics实现非常接近 redux-observableEpics 但没有添加epics的异步/延迟等花哨功能。它由ReactiveSwift提供支持,在转换操作时提供完整的响应式体验。

pod 'SwiftyRedux/Epics'

🌉ReactiveExtensions

ReactiveSwift和SwiftyRedux之间的桥梁:Observable <> SignalObservableProducer <> SignalProducer。这取决于ReactiveSwift和Streoids。

🎨将它们混合在一起!

所有这些组件都依赖于 核心,因此你可以像上面显示的那样安装任何一个。
你还可以将它们任意组合在一起,一次性安装多个,即。

pod 'SwiftyRedux', :subspecs => ['Core', 'Steroids', 'SideEffects', 'BatchedActions']

示例项目

待定

许可协议

SwiftyRedux 在 MIT 许可协议下可用。更多信息请参阅 LICENSE 文件。