ConsistencyManager 8.0.1

ConsistencyManager 8.0.1

测试已测试
Lang语言 SwiftSwift
许可 Apache-2.0
发布最后发布2021年2月
SPM支持 SPM

Peter LiveseyPeter Livesey 维护。



  • 作者:
  • plivesey

概述

Build Status codecov GitHub release Platforms

此库提供了一种保持不可变模型一致性的方法。首先,监听器监听一个不可变模型。每当这个模型(或任何子模型)被更新时,一致性管理器将生成一个新的模型并通知其监听器。

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。