ReSwift — Redux风格的单向数据流
ReSwift是Swift中redux哲学的实现。
如果您不熟悉Redux,那就是管理应用程序的状态。 这样它总是可以预测的。 让我们看一下下面的架构以更好地理解它。
存储 -这是应用程序整个状态所在的位置。 状态可以只是查看状态,甚至可以是数据库状态,应用程序状态等,具体取决于您要如何使用ReSwift。 我建议仅将其用于视图状态,因为ReSwift在主线程上执行。
视图 -视图部分是整个视图层或应用程序的外观 。 简而言之,视图是状态的函数,在任何时候它都只是应用程序状态的一个很好的表示。
动作 -动作是通过用户交互通过视图分派的,并且由商店使用,然后商店会更新应用程序的状态。
这里还有其他两个部分–
减速器 —减速器是纯函数。 他们消耗一个状态,一个动作并产生一个新状态。
中间件 -上面的图中显示了中间件,但是中间件在还原器之前起作用。 每个动作都必须经过中间件,并且它可以对该动作起作用。 它们对于事件记录和操作计划非常有用。 如果您能想到更多案例或想讨论中间件的用例,请在下面的评论中发表。
在普通的iOS应用程序中,ViewController倾向于承担比任何其他组件更多的责任。 随着屏幕复杂性的增加,在我们的视图控制器中维护干净的代码变得越来越困难。 您可以将其与用例联系在一起,在这些用例中,我们最终向视图控制器添加标志和枚举,以使其适用于不同的状态。 记住很难重现的错误,因为只有当您以特定组合执行某些操作时,这些错误才会浮现出来。
ViewController已经承担了很多责任。 跟踪标志,枚举和查看数据是它应该担心的最后一件事。
想象一下,每当您看到与视图相关的错误时,如果只有一种检查方法,这将是多么容易!
使用ReSwift时,View只是状态之上的皮肤。 这意味着,只要您发现视图有问题,就可以随时检查状态以检查不同的值。 同样,状态只能通过调度动作来更改,因此您可以轻松找出导致该状态的动作。 如果预测不是很简单,则可以使用中间件来记录所有已调度操作的日志。
我们知道iOS中出现了许多架构,例如MVVM,MVP,VIPER等。ReSwift以非常独特的方式将自己与这些架构区分开。 如果仔细观察,所有其他架构都将重点放在责任分离上。 ReSwift可帮助您管理应用程序的状态。 这也意味着ReSwift可以轻松地与同一应用程序中的所有这些架构共存。
基本原则
- 所有视图数据都应以某种状态存储。 在任何时间点-整个应用程序(如用户所见)都是该状态的“很好的表示”。
- 只能通过调度动作来修改状态。
- 对于每个视图控制器,只有一个类(通常是演示者)将侦听并响应状态更改。
与MVP并肩作战
代码示例
以下是图像库应用程序中的代码片段,展示了ReSwift框架中的语法片段。
有关完整的代码,请访问https://github.com/amreshkumar/ReSwiftDemo