小巧、高效、易用。Swift 的状态管理。
Sovran 的目标是做到最小化、高效、易于实现,并使调试状态更改变得毫不费力。
虽然这是一个相当有主见的库,但我们希望您会发现这些意见是有充分理由的。虽然它在某种程度上类似于 Redux 和 Flux 之类的东西,但在应用于 Swift 时,存在一些自然的差异。
大型状态结构并不是非常有用。订阅者通常只关心其中包含的数据的一小部分。我们选择允许多个状态结构被提供并协同工作。这使得订阅者可以获得他们真正感兴趣的状态部分。强烈建议状态结构只包含彼此之间存在某种明显关联的属性。
通过使用结构体来定义状态对象,我们受益于 Swift 中固有的复制机制,以确保不向订阅者提供对状态的直接访问。
我们非常小心,不规定您如何编写代码。如果您希望一个状态结构订阅另一个不相关的状态,我们假设您有充分的理由。如果您想要一个巨大的状态结构,虽然这不是我们的首选解决方案,但如果需要,您可以这样做。如果您需要非常规,那就去做。一切都有其时间和地点。
您会注意到,当使用 Sovran 时,实际上是闭包输入定义了给定订阅旨在作用的状态类型。这使我们能够避免让开发者提供两次类型。
示例
store.subscribe(self) { (state: MyState) in
// MyState was updated, react to it in some way.
print(state)
}
在上面的示例中,MyState
定义了订阅调用所需的泛型类型。
代码中出现 bug 是非常常见的。这个库的架构使得库内部以及您自己的代码中的大多数地方,堆栈跟踪都会显示状态更改被启动的确切点以及所有中间点。我们不想重蹈其他类似系统(例如 NotificationCenter)中常见的挫败感,在这些系统中,人们花费数小时试图弄清楚通知在何处/为何发送,以便可以解决 bug。
// 插入显示此内容的 Xcode 堆栈跟踪的屏幕截图。
// 待办事项
Sovran
上进行开发或提出更改,请参阅我们的贡献者文档。MIT 许可证
版权所有 (c) 2021 Segment
特此授予任何人免费获得本软件和相关文档文件(“软件”)副本的许可,以便不受限制地处理本软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许向获得本软件的人员提供软件,但须符合以下条件
上述版权声明和本许可声明应包含在本软件的所有副本或主要部分中。
本软件按“原样”提供,不提供任何形式的明示或暗示的保证,包括但不限于适销性、特定用途的适用性和不侵权的保证。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论是在合同诉讼、侵权诉讼或其他诉讼中,由软件引起、由软件引起或与软件或软件的使用或其他交易有关。