概述
此库提供了一种保持不可变模型一致性的方法。首先,监听器监听一个不可变模型。每当这个模型(或任何子模型)被更新时,一致性管理器将生成一个新的模型并通知其监听器。
Rocket Data
如果您对这个项目感兴趣,您可能希望考虑使用 Rocket Data,它为 Consistency Manager 提供了一个更高层次的 API。它实现了缓存、集合支持和冲突解决。这是消耗 Consistency Manager 的推荐方式。
GitHub: https://github.com/plivesey/RocketData
文档: https://plivesey.github.io/RocketData
安装
pod 'ConsistencyManager'
动机
不可变模型具有许多优点,包括线程安全、性能更高,以及功能更强大和更易于理解的代码。然而,许多应用程序需要能够更新它们的模型,并且这些模型通常在不同的屏幕之间共享。由于模型不可变,你总是需要为更改创建新的模型。然后,你需要将这些更改传播到所有渲染此模型的屏幕。一致性管理器提供了一个 Pub/Sub API,并自动为监听器生成新的模型。
它如何工作
不可变模型可以被视为树。每个模型都有表示数据的字段(字符串、整数等)以及指向其他不可变模型的指针。每个模型也可能有一个 id 去唯一地标识自己。例如,一个消息应用程序可能有两个这样的模型
在该应用程序中,两个视图控制器会向一致性管理器注册,表示它们正在监听这些模型。
// In each UIViewController
ConsistencyManager.sharedInstance.listenForUpdates(self)
应用程序中稍后某个时间,一些来源(如网络请求、推送通知或用户操作)表明具有 id = 12 的用户已经上线。然后,应用程序可以创建一个看起来像这样 的新用户模型
然后,应用程序将此模型更新到一致性管理器中。
ConsistencyManager.sharedInstance.updateWithNewModel(personModel)
一致性管理器发现 Message 和 Contacts 两个模型需要更新,并创建了带有更新后的 Person 模型的这些模型的新副本
然后,一致性管理器通过委托回调将更新后的模型传递给已订阅的监听器(在这种情况下是视图控制器)。视图控制器只需要设置新数据并刷新其视图。
文档
要入门,您应查看文档
https://plivesey.github.io/ConsistencyManager
Swift 版本
我们目前正在维护单独的分支来支持不同的 Swift 版本。但您可以为了支持较旧的 Swift 版本而使用 Consistency Manager 的更稳定版本。HEAD 目前支持 Swift 4.2。
Swift 版本 | 一致性管理器版本 |
---|---|
1 | 不支持 |
2.0 - 2.1 | 2.x.x(未测试) |
2.2 - 2.3 | 2.x.x |
3(简单的迁移 API) | 3.x.x |
3(更好的 API) | 4.x.x |
4 | 5.1.1+ |
4.2 | 7.0.0 |
注意:如果您的应用程序正在迁移到 Swift 3,请考虑首先使用 3.0.0 版本,然后再迁移到 4.x.x。3.0.0 将代码迁移到新的语法,但不做任何 API 变更。4.x.x 引入了一个与新的 Swift 3 API 指南更一致的更好的 API。