Swifty Firebase API @ Ka-ching —第3部分

更新,2018年10月14日:

自撰写本文以来,这些博客文章中描述的概念已被分为两个开源框架,可以在这里找到:

ka-ching-as / FireSwift-Database

Firebase实时数据库的扩展,可以使用“ Codable” Swift类型。 …

github.com

ka-ching-as / RxFireSwift-Database

Firebase实时数据库的RxSwift扩展– ka-ching-as / RxFireSwift-Database

github.com

这篇文章是3(或4或5?)部分系列的延续。

在第一篇文章中,我们向Firebase API添加了Codable支持:

在第二篇文章中,我们使用Phantom Types添加了Type Safe路径,这为我们提供了强类型的路径和出色的API人体工程学:

在本文中,我们将添加对RxSwift的支持。 如果您想了解有关RxSwift的更多信息,请参考官方github回购,其中提供了很好的用例示例。

我在这里要表达的唯一的进一步动机是,Firebase实时数据库和Rx的思维方式存在巨大的重叠:RTDB允许用户订阅随时间变化的数据。 Rx的主要目的之一就是提供随数据随时间变化建模的原语。

如我所见,Rx是使用Firebase RTDB API的理想方式。 例如,使用本机API观察Firebase中某个位置的更改,要求用户跟踪订阅时返回的订阅令牌。 在Rx中,我们可以将此令牌包装在订阅中,以便在处理订阅时删除Firebase观察器。

但是,当我们开始编码时,所有这些可能更容易掌握!

添加一个Rx扩展

为了方便起见,让我们开始向DatabaseQuery添加Rx扩展(这是DatabaseQuery的超类型)。 可以在RxSwift存储库中找到添加Rx扩展的模式,例如RxCocoa扩展。 它看起来如下: