Swifty Redux
Redux 的 Swift 实现
关于
SwiftyRedux 尽可能地接近 Redux.js 的思想和 API。通过共享相同的词汇和在 js 世界中拥有如此庞大的社区,这使得在 iOS 平台上使用这个工具和理解这种方法变得更容易!尽管由于语言和平台的区别,仍会有一些微小差异。
SwiftyRedux 有几个核心组件
-
状态 是一个单一的数据结构。它是我们应用程序的真相之源。存储可以是结构体或枚举,它可能包含其他结构体或枚举作为属性。通常它是一个深度嵌套的对象,描述了整个应用程序的状态。请记住,状态应该易于序列化和反序列化,因此不应包含任何行为。状态由存储管理。
-
存储 是包含状态的地方。它还允许订阅状态更改并分配动作来更改其状态。在整个 Redux 应用程序中只有一个存储。
-
动作 是一个代表意图更改状态的普通对象。动作不应包含任何行为。所有动作都应该符合空的
Action
协议。更改状态的唯一方式是通过动作,这将 -
减速器 是唯一可以基于当前状态和动作更改状态的地方。减速器必须是纯函数 - 给定输入返回相同输出的函数,因此不执行任何副作用。这使得它们易于测试和推理影响全局应用程序状态的逻辑。存储负责将动作传递给减速器,并使用它们的结果更新状态。
-
中间件 是您放置异步逻辑和副作用的地方。这是将 IO 与纯单向流应用程序连接的最佳方式。它们在分配之后和到达减速器之前拦截动作,但您可以根据需要设计中间件,以便它们不会减慢将动作传递给减速器的速度。
有关此方法的更多信息以及 Redux.js 社区经验,请参阅 https://redux.js.cn/introduction/getting-started。
流程图
通常情况下,您的流程将与当前图匹配
- 您通过Store发送一个Action。
- Action传递到Middleware。
- Middleware可能会派发一个新的Action(这将从头开始传递)或者进一步传播它。
- Reduces接收Action和当前状态。
- 它们可能会将Action应用到状态中,以返回新状态,或者在没有需要变化的情况下返回当前状态。
- 在状态改变后,任何观察者都将收到它。
- 对于UI观察者,Presenters可以将状态或其部分转换为Props,并将其传递给它们的Views进行渲染。
- 任何用户操作或程序事件都可以转换为Action,并将派送到Store以从开始这个周期。
安装
CocoaPods
您可以通过将SwiftyRedux添加到你的Podfile中来使用CocoaPods安装它
pod 'SwiftyRedux'
并运行pod install
。
Carthage
待定
Swift包管理器
待定
沙盒
还有一个沙盒,你可以在这里尝试SwiftyRedux。为了开始使用它
- 打开
Example/SwiftyRedux.xcworkspace
。 - 构建
SwiftyRedux-Example
方案。 - 最后打开
Example/SwiftyRedux.playground
。 - 选择
视图 > 显示调试区域
。
项目结构
SwiftyRedux试图将其核心尽可能简约,同时在核心之上还允许进行扩展。
以下是本仓库包含的组件
⚙️ 核心
核心是基本组件,包含SwiftyRedux所需的全部基本功能 :)
例如 Action
、Reducer
、Middleware
、Store
和 Disposable
。
pod 'SwiftyRedux/Core'
💊 强化
强化扩展提供将来自存储的状态更新转换为声明式API的功能。它的 Observable
和 ObservableProducer
抽象在外观和功能上类似于 ReactiveSwift 的 Signal
和 SignalProducer
。
pod 'SwiftyRedux/Steroids'
🚌 BatchedActions
批量操作允许一次性发送多个操作,并通过改进的reducer或自定义中间件(但不两者同时使用)将它们拆分为单个操作。灵感来自 redux-batched-actions。
pod 'SwiftyRedux/BatchedActions'
💥 SideEffects
副作用是一种在reducer收到并处理了操作之后运行的中间件,因此它们不能“吞下”或延迟它。灵感来自 redux-observable。 Epics 但这是一种“命令式”的epics。
pod 'SwiftyRedux/SideEffects'
📦 Command
命令是围绕包含额外调用方元信息的函数的简单包装器,以便更容易地进行调试。
pod 'SwiftyRedux/Command'
🚀 Epics
实际上epics实现非常接近 redux-observable。 Epics 但没有添加epics的异步/延迟等花哨功能。它由ReactiveSwift提供支持,在转换操作时提供完整的响应式体验。
pod 'SwiftyRedux/Epics'
🌉 ReactiveExtensions
ReactiveSwift和SwiftyRedux之间的桥梁:Observable
<> Signal
,ObservableProducer
<> SignalProducer
。这取决于ReactiveSwift和Streoids。
🎨 将它们混合在一起!
所有这些组件都依赖于 核心,因此你可以像上面显示的那样安装任何一个。
你还可以将它们任意组合在一起,一次性安装多个,即。
pod 'SwiftyRedux', :subspecs => ['Core', 'Steroids', 'SideEffects', 'BatchedActions']
示例项目
待定
许可协议
SwiftyRedux 在 MIT 许可协议下可用。更多信息请参阅 LICENSE 文件。