Swift中Redux入门–第1部分

一种学习Swift中Redux入门的简单方法。

Redux是一种架构软件模式的实现,该模式优先考虑单向数据流。 它是由Flux架构(由Facebook开发)创建的,在应用程序的开发中已取得了长足的发展,并有望在其使用中带来巨大的优势。 它是诸如MVC,MVVM和Viper之类的其他架构模式的替代。

好处

Redux的巨大希望之一就是创建约束条件,以鼓励更有组织的软件开发和测试,因此,由于这些原因,最终会降低开发阶段的复杂性,并提供维护应用程序状态和高级调试的工具。 。

本文介绍了一种开始了解这种新模式的简单方法。

实施要求

  • 在iOS(Swift + Xcode)上构建应用程序的基本级别。
  • 观察者模式知识。
  • 知道如何使用CocoaPods依赖系统。

组件

  • 状态:代表应用程序的状态。 只能有一个,可以分为子状态。
  • 动作:这些是描述系统功能的简单对象。 根据情况,这些对象是否可以携带信息。 它们是由View层调度的,目的是更改应用程序的状态。
  • 减速器:这是我们开发应用程序主要逻辑的地方。 减速器必须是无副作用的纯函数,并且必须是同步的。 它们是唯一可以为应用程序创建新状态的对象。 给它们一个动作和当前状态,并返回一个新状态。

请注意,单向流是在View调度Action时发生的。 此Action传递到相应的Reducer,因此,此Reducer根据先前的Action生成一个新的State,并将State传递回View,以便对其进行更改。

  • 商店:这是此实现过程中最重要的组成部分。 它是汇总上述所有组件并使流程正常工作的原因。 View将新的Action调度到商店。 然后,商店将此动作与当前状态一起传递给Reducer,然后接收回还原器的新状态。 每当创建新状态时,都会警告视图,这可以通过实现观察者设计模式来实现,该观察器设计模式允许视图成为要通知的商店的“订户”。

开始吧

我开始学习Redux的方法是使用一个名为ReSwift的库来构建示例应用程序(“ Rock,Paper and Scissors”游戏),该库在Swift中实现了该架构的概念。

我们首先概述应用程序的外观。 为简单起见,该应用程序应在单个ViewController上工作,在底部包含3个按钮(Rock,Paper和Scissors),在顶部包含1个消息字段,并包含2个占位符,以显示玩家何时进行移动以及最后移动揭示玩家的武器。

为了开始开发,我提出了一个用例,其中Player1选择剪刀,而Player2选择Rock ,从而赢得了Player2的胜利。 该流将发生如下:

发展历程

在Xcode中创建一个新的“单视图应用程序”项目,并使“包含单元测试”能够使用Redux的概念进行测试。

使用CocoaPods安装“ ReSwift”吊舱。

接下来,我们将创建第一个组件,状态。 查看上图,我们可以清楚地看到应用程序在执行过程中将发生变化的部分,其中每个部分都由应用程序的状态组成。 然后,我创建了一个State.swift文件,并将状态形成结构以及可能形成应用程序概念的模板结构放入其中。 重要的是要指出结构必须是不可变的,以便Redux起作用,只有这样我们才能确保状态仅由化简器更改,因此我使用了Structs和Enums而不是Classs:

现在让我们创建一个动作,该动作将描述打算更改状态的动作。 在这种情况下,我们只有一个ChooseWeaponAction ,它在每个玩家选择武器时触发:

最后,我们将构建减速器。 在这里,我们过滤创建的Action,获取应用程序的当前状态,并根据将使用Action中包含的信息开发的逻辑来生成新的State:

测试

完成,如此简单,我们已经实现了具有单向流的Redux模式。 为了显示测试这种类型的体系结构的简便性,我构建了XCTest类来测试应用程序逻辑,甚至没有构建UI层(视图)。

精加工

最后,我创建了一个具有素描图中所示特征的ViewController,并使该ViewController成为Store的“订户”,因此只要State发生变化,就可以在视图中进行更改。 这发生在StoreSubscriber协议的实现中:

学分

  • Redux
  • 重新快速

要深入研究该主题:

  • 雷·温德利希(Ray Wenderlich)的ReSwift教程